如何查询Table1中重复且存在于Table2的AccessNumber?
解决方案:符合需求的SQL查询优化与补全
没问题,我来帮你补全并优化这个SQL查询,完美匹配你的需求~
首先明确你的核心需求:
- 从
Table1中找出重复次数大于1的AccessNumber - 同时这些
AccessNumber必须存在于Table2中
写法一:直接关联后分组筛选
这是最直观的写法,先关联两张表过滤出Table2存在的记录,再分组统计重复次数:
SELECT a.AccessNumber FROM Table1 a JOIN Table2 b ON b.AccessNumber = a.AccessNumber GROUP BY a.AccessNumber HAVING COUNT(a.AccessNumber) > 1;
逻辑解释:
JOIN Table2:先把Table1中所有在Table2里有匹配的AccessNumber筛选出来,自动排除掉Table2不存在的记录(比如你的示例里的5000)GROUP BY a.AccessNumber:按AccessNumber分组,方便统计每个编号的出现次数HAVING COUNT(...) > 1:只保留分组后出现次数大于1的编号,也就是重复的记录
写法二:先筛选重复再关联(性能更优)
如果Table1数据量很大,推荐先在Table1内部筛选出重复的编号,再和Table2关联,这样能减少关联的数据量,提升查询效率:
SELECT t1_dup.AccessNumber FROM ( -- 子查询先找出Table1中重复次数>1的AccessNumber SELECT AccessNumber FROM Table1 GROUP BY AccessNumber HAVING COUNT(AccessNumber) > 1 ) t1_dup JOIN Table2 b ON t1_dup.AccessNumber = b.AccessNumber;
逻辑解释:
- 子查询先从Table1中过滤出所有重复的
AccessNumber(比如示例里的1000、5000) - 再和Table2做关联,只保留两边都存在的编号(示例里就只剩下1000)
验证你的示例
针对你给出的测试数据:
- Table1的
AccessNumber:1000(3条)、2000(1条)、3000(1条)、4000(1条)、5000(2条) - Table2的
AccessNumber:1000、2000、3000
两种写法都会返回1000,完全符合你的预期结果。
内容的提问来源于stack exchange,提问作者Maverick
相关产品推荐
相关产品推荐

