SQL:在A列中查找记录,在B列中查找重复项

时间:2018-06-28 06:22:47

标签: mysql sql

我想知道您是否可以解决我遇到的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

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

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

非常感谢。 干杯

2 个答案:

答案 0 :(得分:1)

如果您有可用的分析功能(MySQL 8.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;

答案 1 :(得分:1)

您可以使用EXISTS

SELECT *
FROM tab t1
WHERE EXISTS (SELECT 1 
             FROM tab t2 
             WHERE t1.ColumnA=t2.ColumnA AND t1.ColumnB = t2.ColumnB
               AND t1.id <> t2.id);