如何用Group By+HAVING显示重复Lookup值的所有记录?
问题原因
你的关联查询返回空结果,核心问题在于子查询的分组逻辑错误:
- 子查询里同时按
Lookup和id分组,而id作为表的唯一标识(通常为主键),每条记录的id都不重复,分组后每组只会有1条记录,HAVING COUNT(*) > 1的条件永远无法满足,导致子查询返回空集,最终关联后没有数据。
正确查询方案
方案1:关联重复Lookup集合
先筛选出所有存在重复的Lookup值,再关联原表获取对应的id:
SELECT a.id, a.Lookup FROM Clients AS a JOIN ( SELECT Lookup FROM Clients GROUP BY Lookup HAVING COUNT(*) > 1 ) AS b ON a.Lookup = b.Lookup ORDER BY a.Lookup, a.id;
方案2:窗口函数实现(更高效简洁)
用窗口函数直接计算每个Lookup的重复次数,再过滤出重复记录:
SELECT id, Lookup FROM ( SELECT id, Lookup, COUNT(*) OVER(PARTITION BY Lookup) AS lookup_duplicate_count FROM Clients ) AS temp WHERE lookup_duplicate_count > 1 ORDER BY Lookup, id;
内容的提问来源于stack exchange,提问作者Mighty
相关产品推荐
相关产品推荐

