sql查询哪些 B 值出现在多个 A 值中

8 阅读1分钟

找出 A 列的不同值中,它们的 B 列有“交集”的那些值。换句话说,就是找出 “哪些 B 值出现在多个 A 值中”


✅ 场景举例:

my_table 结构如下:

A列B列
A1B1
A1B2
A2B2
A2B3
A3B1

目标是找出哪些 B列 的值在多个 A列 的值中重复出现,比如:

  • B1 → 属于 A1A3 → ✔
  • B2 → 属于 A1A2 → ✔
  • B3 → 只在 A2 → ✘

✅ SQL 查询写法:

SELECT B列
FROM my_table
GROUP BY B列
HAVING COUNT(DISTINCT A列) > 1;

🔍 解释:

  • GROUP BY B列:我们想找的是 哪些 B 值 在多个 A 中出现;
  • COUNT(DISTINCT A列):计算每个 B 值关联了几个不同的 A;
  • HAVING > 1:只保留出现在多个 A 中的 B。

✅ 查询结果示例:

B列
----
B1
B2

如果还想查出 这些交集的 A 值和 B 值的组合,可以再做一步:

SELECT *
FROM my_table
WHERE B列 IN (
    SELECT B列
    FROM my_table
    GROUP BY B列
    HAVING COUNT(DISTINCT A列) > 1
);

需要进一步筛选或分析(比如哪些 A 重合得最多),也可以继续拓展