У меня есть таблица с некоторыми строками, которые являются дубликатами других, кроме ключевого столбца. Мне нужно вернуть список всех значений ключей, которые имеют дубликаты. Например:
(key)
ID Column_B Column_C Column_D Column_E
1 foo bar beyond belief
2 foo bar beyond belief
3 blah blah2 blah3 blah4
4 ho hum di dum
5 foo bar beyond belief
В этом случае мне нужно, чтобы запрос возвратил 1, 2, and 5
, так как все эти ключи имеют повторяющиеся значения во всех остальных столбцах.
Я могу сделать это достаточно легко в этом упрощенном примере, используя соединение следующим образом:
SELECT ID
FROM mytable t
INNER JOIN (SELECT Column_B, Column_C, Column_D, Column_E
FROM mytable
GROUP BY Column_B, Column_C, Column_D, Column_E
HAVING COUNT(*) > 1) t2
ON t.Column_B = t2.Column_B
AND t.Column_C = t2Column_C
AND t.Column_D = t2.Column_D
AND t.Column_E = t2.Column_E
Но моя «настоящая» таблица имеет много столбцов (более 20), и это может увеличиться (это денормализованная таблица для быстрого создания отчетов), поэтому я надеялся, что кто-то может придумать:
- что-то более динамичное, или
- что-то немного менее громоздкое, чем объединение во всех столбцах.
SQL или PL / SQL в порядке ..