PostgreSQL条件生成点表报错求助:添加WHERE子句后查询异常
问题解决思路
你的SQL语句存在几处语法和逻辑问题,修正后即可正常执行:
主要错误点
- WHERE子句位置错误:WHERE子句不能插在FROM子句的表和函数之间,必须放在所有表/关联语句之后。
- 字符串常量引用错误:PostgreSQL中字符串值要用单引号
'01',双引号是用来引用列名、表名这类标识符的,用双引号会被识别成列名,导致找不到对应字段。 - 关联函数的方式错误:
st_dumppoints依赖table1的列(column1和geom),需要用LATERAL JOIN逐行处理原表数据,不能直接用逗号拼接。
修正后的SQL语句
CREATE TABLE schema.table2 AS SELECT "column1", "column2", dp.geom FROM table1 -- 先筛选符合条件的记录 WHERE "column2" = '01' -- 用LATERAL JOIN关联点生成函数,逐行处理筛选后的记录 LATERAL JOIN st_dumppoints(st_generatepoints(table1.geom, CAST(table1.column1 AS INT))) AS dp;
也可以把WHERE放在JOIN之后,效果一致:
CREATE TABLE schema.table2 AS SELECT "column1", "column2", dp.geom FROM table1 LATERAL JOIN st_dumppoints(st_generatepoints(table1.geom, CAST(table1.column1 AS INT))) AS dp WHERE "column2" = '01';
说明
- 用单引号
'01'指定字符串值,避免被识别为标识符。 LATERAL JOIN允许右侧函数引用左侧表(table1)的列,能基于每一条符合条件的记录生成对应点数据。- WHERE子句放在正确位置,确保先筛选出
column2为01的记录再生成点数据,提升执行效率。
内容的提问来源于stack exchange,提问作者Mariah.H
相关产品推荐
相关产品推荐

