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 如何选择表中除一列以外的所有列_Sql_Postgresql - Fatal编程技术网

Sql 如何选择表中除一列以外的所有列

Sql 如何选择表中除一列以外的所有列,sql,postgresql,Sql,Postgresql,我的代码如下所示: CREATE TABLE tableC AS (SELECT tableA.*, ST_Intersection (B.geom, A.geom) as geom2 -- generate geom FROM tableB, tableA JOIN tableB ON ST_Intersects (A.geom, b.geom) WHERE test.id = 2); 现在它正在工作,但我有两个专栏geom和geom2! 在geom列中,我将基于交点创建新

我的代码如下所示:

 CREATE TABLE tableC AS
 (SELECT tableA.*,
  ST_Intersection (B.geom, A.geom) as geom2  -- generate geom
 FROM tableB, tableA
 JOIN tableB
 ON ST_Intersects (A.geom, b.geom)
 WHERE test.id = 2);
现在它正在工作,但我有两个专栏geom和geom2!
在geom列中,我将基于交点创建新几何体。那么,除了geom列之外,我如何选择tableA呢?

实现这一点的唯一方法是基于表中的列生成一条动态SQL语句,其中不包括您不需要的列。显然,这比简单地添加所有列名要费劲得多

考虑到SQL在返回的列的数量和格式上有多么挑剔,也有很多很好的理由不在生产环境中包含select*。通过使用select*,您可以在将来看到一个不断变化的查询结果,这可能会破坏一切

如果您有很多列,但不想手动将它们全部键入,请对表运行下面的查询,然后格式化结果,以便可以复制/粘贴到脚本中:

SELECT *
FROM information_schema.columns
WHERE table_schema = 'your_schema'
  AND table_name   = 'your_table'

创建包含所有列的表,然后删除geom列并重命名新列:

CREATE TABLE tableC AS
SELECT
    tableA.*,
    ST_Intersection (B.geom, A.geom) as geom2  -- generate geom
FROM
    tableA inner JOIN tableB ON ST_Intersects (A.geom, b.geom)
WHERE test.id = 2
;

alter table tableC drop column geom;
alter table tableC rename column geom2 to geom;

别偷懒,指定你想要的列。好的,我可以做到。我想也许会有更简单的方法。因为我在表中有很多列。。。