找出 A 列的不同值中,它们的 B 列有“交集”的那些值。换句话说,就是找出 “哪些 B 值出现在多个 A 值中” 。
✅ 场景举例:
表 my_table
结构如下:
A列 | B列 |
---|---|
A1 | B1 |
A1 | B2 |
A2 | B2 |
A2 | B3 |
A3 | B1 |
目标是找出哪些 B列
的值在多个 A列
的值中重复出现,比如:
B1
→ 属于A1
和A3
→ ✔B2
→ 属于A1
和A2
→ ✔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 重合得最多),也可以继续拓展