У меня есть строки в таблице базы данных Oracle, которые должны быть уникальными для комбинации двух полей, но уникальный ограничитель не настроен в таблице, поэтому мне нужно найти все строки, которые сами нарушают ограничение с помощью SQL. К сожалению, мои скудные навыки SQL не соответствуют задаче.SQL: Как найти дубликаты на основе двух полей?
В моей таблице три столбца, которые имеют значение: entity_id, station_id и obs_year. Для каждой строки комбинация station_id и obs_year должна быть уникальной, и я хочу узнать, есть ли строки, которые нарушают это, очищая их SQL-запросом.
Я попытался следующий SQL (предложенный this previous question), но она не работает для меня (я получаю ORA-00918 столбец двусмысленно определен):
SELECT
entity_id, station_id, obs_year
FROM
mytable t1
INNER JOIN (
SELECT entity_id, station_id, obs_year FROM mytable
GROUP BY entity_id, station_id, obs_year HAVING COUNT(*) > 1) dupes
ON
t1.station_id = dupes.station_id AND
t1.obs_year = dupes.obs_year
Может кто-то предложить, что я делаю неправильно , и/или как это решить?
Большое спасибо за этот ответ. К сожалению, когда я запускаю это, я получаю сообщение «ORA-00923: FROM ключевое слово не найдено, где ожидалось». –
@James: попробуйте сейчас – Quassnoi
В mssql in пришлось поместить 'as x' (имя не имеет значения) за Paranthesis FROM(), чтобы заставить его работать. Отличный ответ! – Mafii