SQL报42P01错误:WITH定义的CTE add_lon不存在如何解决
问题原因
你遇到的SQL Error [42P01]: ERROR: relation "add_lon" does not exist报错核心原因是SQL末尾多了一个多余的孤立右括号),直接打乱了WITH子句(公共表表达式)的括号匹配逻辑,数据库解析时无法识别你定义的add_lonCTE,直接判定该关系不存在。
除此之外你的代码还有两处逻辑错误,修正括号后依然会触发运行报错:
- 字段归属表写错:
billtoaddress是sales.salesorderheader(订单表头)的字段,不属于别名s指代的sales.salesorderdetail(订单明细)表,原关联条件无法匹配到字段 - 聚合字段取错表:
orderqty是订单明细表的字段,订单表头表不存储单行明细的购买数量,原sum逻辑取数错误
更新说明对应:已剔除无关核对语句不影响核心逻辑排查
修正后可运行代码
with pro_cra as ( select p.productid from production.product p where p."name" like 'Crankset' ), add_lon as ( select a.addressid from person.address a where city like 'London' ) select sum(s.orderqty) from sales.salesorderdetail s join sales.salesorderheader s1 on s.salesorderid = s1.salesorderid join add_lon adl on s1.billtoaddress = adl.addressid join pro_cra prc on s.productid = prc.productid;
修正点说明
- 删除了原语句分号后多余的右括号,保证WITH子句结构符合PostgreSQL语法规则
- 将地址关联条件调整为
s1.billtoaddress = adl.addressid,匹配字段实际存储的表 - 将聚合字段调整为明细表的
s.orderqty,正确统计伦敦地区Crankset产品的总下单量
内容的提问来源于stack exchange,提问作者Serhat
相关产品推荐
相关产品推荐

