SQL查询:获取Table1中重复erp_key的关联Table2完整数据
解决方法:先统计重复次数再关联表
我来帮你搞定这个问题!你之前的查询之所以COUNT结果不对,核心原因是分组时包含了article_key、descr.、date这些每个记录唯一的字段——这会让每个分组只包含一条数据,COUNT自然永远是1,根本触发不了having COUNT(erp_key) > 1的条件。
咱们换个思路:先单独统计每个erp_key的重复次数,再把这个统计结果和原表、Table2关联,就能同时拿到重复次数和关联的描述、日期信息了。
正确的SQL查询语句
SELECT t1.erp_key, t1.article_key, t2.descr., t2.date, cnt.counter FROM Table1 t1 INNER JOIN Table2 t2 ON t1.article_key = t2.article_key INNER JOIN ( -- 先统计所有重复的erp_key及其次数 SELECT erp_key, COUNT(*) AS counter FROM Table1 GROUP BY erp_key HAVING COUNT(*) > 1 ) cnt ON t1.erp_key = cnt.erp_key ORDER BY t1.erp_key ASC;
结果验证
执行这个语句后,你会得到如下结果:
| erp_key | article_key | descr. | date | counter |
|---|---|---|---|---|
| 3 | a3 | d | 5-4-2017 | 2 |
| 3 | a4 | f | 6-4-2017 | 2 |
| 5 | a6 | h | 8-4-2017 | 2 |
| 5 | a7 | j | 9-4-2017 | 2 |
完全符合你的需求:每个重复的erp_key对应的所有记录都显示出来,同时正确标注该erp_key的总重复次数。
为什么你的原查询不对?
你原查询的GROUP BY子句包含了erp_key, Table1.article_key, descr, date_——这四个字段的组合在你的数据里是完全唯一的(比如erp_key=3对应两个不同的article_key,各自的descr和date也不一样)。这就导致每个分组只能对应一条记录,COUNT(erp_key)的结果必然是1,永远满足不了having COUNT(erp_key) > 1的筛选条件,所以查不到任何数据或者结果不符合预期。
内容的提问来源于stack exchange,提问作者BMeijers
相关产品推荐
相关产品推荐

