Выбор повторяющихся значений в нескольких столбцах

Необходимо написать запрос в общем виде для отображения повторяющихся значений в одном столбце только в том случае, если им соответствуют повторяющиеся значения (другие) в другом столбце. Например, есть два столбца:

введите сюда описание изображения

Ожидаемый результат:

введите сюда описание изображения

Через count(значения первого столбца) >1 AND count(значения второго столбца) >1 не получается, т.к. выводятся просто все значения по двум столбцам, количество которых > 1. Нужно именно как-то связать столбцы между собой: искать повторы по другим столбцам в рамках повторов в первом столбце. При этом не конкретных повторов, а общее правило задать, т.к. таблица огромная.


Ответы (1 шт):

Автор решения: Akina

Для СУБД, не поддерживающих CTE и оконные функции:

SELECT t1.*
FROM table t1
NATURAL JOIN ( SELECT col1, col2
               FROM table t2
               GROUP BY 1, 2
               HAVING COUNT(*) > 1 ) t3

Для СУБД, поддерживающих CTE и оконные функции:

WITH cte AS (
    SELECT *, COUNT(*) OVER (PARTITION BY col1, col2) cnt
    FROM table
    )
SELECT * 
FROM cte
WHERE cnt > 1;
→ Ссылка