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;
别偷懒,指定你想要的列。好的,我可以做到。我想也许会有更简单的方法。因为我在表中有很多列。。。