Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL insert into语句导致奇怪的(笛卡尔积)结果_Sql_Postgresql_Sql Insert - Fatal编程技术网

SQL insert into语句导致奇怪的(笛卡尔积)结果

SQL insert into语句导致奇怪的(笛卡尔积)结果,sql,postgresql,sql-insert,Sql,Postgresql,Sql Insert,我正在使用PostgreSQL 11和PostGIS 2.5.1,并尝试在现有表中创建一个具有特定值的新列 样本表如下: CREATE TABLE test (id integer, geom GEOMETRY); INSERT INTO test (id, geom) VALUES (1, ST_GeomFromEWKT('SRID=4326;POINT(-71.00 42.00)')), (2, ST_GeomFromEWKT('SRID=4326;POINT(52.00 52.00)

我正在使用PostgreSQL 11和PostGIS 2.5.1,并尝试在现有表中创建一个具有特定值的新列

样本表如下:

 CREATE TABLE test (id integer, geom GEOMETRY);

INSERT INTO test (id, geom)
VALUES 
(1, ST_GeomFromEWKT('SRID=4326;POINT(-71.00 42.00)')),
(2, ST_GeomFromEWKT('SRID=4326;POINT(52.00 52.00)'));
如果我创建一个新列并执行insert into语句,结果就像笛卡尔积

ALTER Table test
ADD wkt_text TEXT;


INSERT INTO test (wkt_text)
SELECT st_astext(a.geom)::text FROM test a, test b
WHERE a.id = b.id;
结果如下所示:

SELECT * FROM test;
 id |                        geom                        |   wkt_text    
----+----------------------------------------------------+---------------
  1 | 0101000020E61000000000000000C051C00000000000004540 | 
  2 | 0101000020E61000000000000000004A400000000000004A40 | 
    |                                                    | POINT(-71 42)
    |                                                    | POINT(52 52)
为什么会这样?Insert into在具有空列的表上运行时没有问题。一旦有一列填充了一个值,结果如下所述

我通过以下查询得到了正确的结果,但我想了解原因

WITH subquery AS (
    SELECT id, st_astext(geom)::text AS wkt_text
    FROM test 
)
UPDATE test
SET wkt_text=subquery.wkt_text
FROM subquery
WHERE test.id = subquery.id;

INSERT
在表中插入新行。
INSERT
中未指定的列提供了
NULL
值(或指定的默认值)

UPDATE
更新现有行中的列。这似乎是你想要的逻辑,你有正确的陈述