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

如何查询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;

逻辑解释:

  1. JOIN Table2:先把Table1中所有在Table2里有匹配的AccessNumber筛选出来,自动排除掉Table2不存在的记录(比如你的示例里的5000)
  2. GROUP BY a.AccessNumber:按AccessNumber分组,方便统计每个编号的出现次数
  3. 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;

逻辑解释:

  1. 子查询先从Table1中过滤出所有重复的AccessNumber(比如示例里的1000、5000)
  2. 再和Table2做关联,只保留两边都存在的编号(示例里就只剩下1000)

验证你的示例

针对你给出的测试数据:

  • Table1的AccessNumber:1000(3条)、2000(1条)、3000(1条)、4000(1条)、5000(2条)
  • Table2的AccessNumber:1000、2000、3000

两种写法都会返回1000,完全符合你的预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:10:24