如何选择除

时间:2017-02-10 09:59:25

标签: 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列内部,我将根据交点得到新的几何体。那么如何选择除了geom列之外的tableA?

2 个答案:

答案 0 :(得分:1)

创建包含所有列的表格,然后删除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;

答案 1 :(得分:0)

您能够执行此操作的唯一方法是基于表中的列排除您不想要的列的动态SQL语句。显然,与简单地添加所有列名相比,这将付出更多的努力。

在生产环境中永远不会包含select *的原因还有很多很好的理由,因为对于返回的列的数量和格式,SQL常常是挑剔的。通过使用select *,您可以在未来打开一个可能会破坏事物的更改查询结果。

如果你有很多列而你根本不想手动输入它们,请为你的表运行下面的查询,然后格式化结果,以便你可以复制/粘贴到你的脚本中:

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