Мне интересно, можете ли вы помочь мне в 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, которые имеют дубликаты в столбце B, поэтому запрос должен возвращаться
ID ColumnA ColumnB
1 123 A
2 123 A
5 456 B
6 456 B
Заранее большое спасибо. ура
Если у вас есть доступные аналитические функции (MySQL 8.x
и более поздние 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;
Вы можете использовать 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);