You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询ON子句中表列无法识别异常问题求助

问题分析与解决方案

这个问题我太熟悉了——你踩了PostgreSQL双引号标识符解析的经典坑!

核心原因

PostgreSQL对带双引号的标识符(表名、列名)有严格的解析规则:

  • 双引号内的内容会被当作完整的单个标识符,里面的点号.不会被解析成「表名.列名」的分隔符
  • 同时,双引号会强制区分大小写,必须和你创建对象时的大小写完全匹配

你写的"Segments.Id"会被PostgreSQL误认为是Segments表中名为Segments.Id的列(而不是Segments表的Id列),这就是为什么报错提示该列不存在。同理,"AggregatedValues.Segment"也会被当成一个完整的列名,而非AggregatedValues表的Segment列,调换条件顺序后自然会报另一个列不存在的错误。

正确的SQL写法

把表名和列名分别用双引号包裹,点号放在双引号之外,让PostgreSQL正确识别表和列的关系:

SELECT "Segments"."Id", "AggregatedValues"."Segment" 
FROM "Segments" 
INNER JOIN "AggregatedValues" ON "Segments"."Id" = "AggregatedValues"."Segment";

额外小提示

如果你的表和列创建时没有用双引号,PostgreSQL会自动将它们转换为小写存储,这时候你甚至可以不用双引号,直接写小写的标识符也能正常查询:

SELECT segments.id, aggregatedvalues.segment 
FROM segments 
INNER JOIN aggregatedvalues ON segments.id = aggregatedvalues.segment;

内容的提问来源于stack exchange,提问作者Sergi Doce

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 17:27:27