Выбор повторяющихся значений в нескольких столбцах
Необходимо написать запрос в общем виде для отображения повторяющихся значений в одном столбце только в том случае, если им соответствуют повторяющиеся значения (другие) в другом столбце. Например, есть два столбца:
Ожидаемый результат:
Через count(значения первого столбца) >1 AND count(значения второго столбца) >1 не получается, т.к. выводятся просто все значения по двум столбцам, количество которых > 1. Нужно именно как-то связать столбцы между собой: искать повторы по другим столбцам в рамках повторов в первом столбце. При этом не конкретных повторов, а общее правило задать, т.к. таблица огромная.
Ответы (1 шт):
Для СУБД, не поддерживающих 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;