PostgreSQL技术问询:如何查询关联多个不同display的唯一code
问题分析与正确查询写法
你的查询存在两处问题:
- 语法顺序错误:
GROUP BY必须放在WHERE之后,且针对分组聚合结果的筛选要使用HAVING而非WHERE(WHERE用于过滤单条行数据,HAVING用于过滤分组后的结果)。 - 逻辑冲突:按
code分组后,SELECT中包含的display既不在分组字段里,也未通过聚合函数处理,PostgreSQL会直接抛出语法错误。
根据你的需求,分两种场景给出正确写法:
场景1:仅获取符合条件的唯一code
如果只需要找出关联了多个不同display值的code,使用以下查询即可:
SELECT code FROM directions GROUP BY code HAVING COUNT(DISTINCT display) > 1;
执行后会返回示例中的2和4,完全匹配需求。
场景2:获取符合条件的code对应的所有display记录
如果需要展示这些code对应的所有原始display数据,可以通过子查询先筛选出目标code,再关联原表:
SELECT d.code, d.display FROM directions d WHERE d.code IN ( SELECT code FROM directions GROUP BY code HAVING COUNT(DISTINCT display) > 1 );
执行后会返回:
code | display -----+--------- 2 | East 2 | South 2 | South 4 | West 4 | North
内容的提问来源于stack exchange,提问作者D. Fowler
相关产品推荐
相关产品推荐

