找出 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 重合得最多),也可以继续拓展