2つのフィールドの組み合わせに対して一意である必要があるOracleデータベーステーブルに行がありますが、テーブルに一意の制約が設定されていないため、SQLを使用して自分で制約に違反するすべての行を見つける必要があります. 残念ながら、私の貧弱な SQL スキルでは、このタスクをこなすことはできません。
私のテーブルには、entity_id、station_id、obs_year という関連する 3 つの列があります。各行について、station_id と obs_year の組み合わせは一意である必要があります。これに違反する行があるかどうかを、SQL クエリでフラッシュして確認したいと考えています。
次のSQLを試しました(この前の質問で提案されています)が、うまくいきません(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
誰かが私が間違っていること、および/またはこれを解決する方法を提案できますか?