SQL: найти записи в столбце A с дубликатами в столбце B

0

Мне интересно, можете ли вы помочь мне в 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

Заранее большое спасибо. ура

  • 0
    Какую версию SQL вы используете?
  • 0
    Привет Тим, я использую MySQL 5.7.21
Теги:

2 ответа

1
Лучший ответ

Если у вас есть доступные аналитические функции (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;
  • 0
    Большое спасибо, Тим !!! Работает отлично :-) ты спас мой день ...
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);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню