我在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關鍵字找不到預期的地方」的消息。 – 2010-08-17 17:00:39
@James:現在試試 – Quassnoi 2010-08-17 17:11:15
在mssql中,必須在FROM()參數後面放置一個'as x'(名字並不重要)才能使其工作。很好的答案! – Mafii 2017-04-06 09:30:06