sql:在a列中查找记录,在b列中查找重复的记录

yc0p9oo0  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(368)

我想知道你能不能帮我解决一个sql问题。
我的table看起来像

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中所有在columnb中有重复项的记录,因此查询应该返回

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

提前多谢了。干杯

qojgxg4l

qojgxg4l1#

你可以用 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);
lnxxn5zx

lnxxn5zx2#

如果您有可用的分析函数(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;

相关问题