首页 > 解决方案 > SQL:在 A 列中查找与 B 列重复的记录

问题描述

我想知道您是否可以帮助我解决我遇到的 sql 问题。

我的桌子看起来像

ID    ColumnA     ColumnB
1       123          A
2       123          A
3       123          B
4       456          A
5       456          B
6       456          B
7       789          A
8       789          B
9       789          C

我想识别在 ColumnB 中有重复的 ColumnA 的所有记录,因此查询应该返回

ID    ColumnA     ColumnB
1       123          A
2       123          A
5       456          B
6       456          B

提前非常感谢。干杯

标签: mysqlsql

解决方案


如果您有可用的分析函数(MySQL8.x和更高版本),请使用它们:

SELECT ID, ColumnA, ColumnB
FROM
(
    SELECT *, COUNT(*) OVER (PARTITION BY ColumnA, ColumnB) cnt
    FROM yourTable
) t
WHERE cnt > 1;

如果您没有分析功能,那么我们必须做更多的工作:

SELECT t1.*
FROM yourTable t1
INNER JOIN
(
    SELECT ColumnA, ColumnB, COUNT(*) AS cnt
    FROM yourTable
    GROUP BY ColumnA, ColumnB
) t2
    ON t1.ColumnA = t2.ColumnA AND t1.ColumnB = t2.ColumnB AND t2.cnt > 1;

推荐阅读