Ich habe Zeilen in einer Oracle-Datenbanktabelle, die für eine Kombination aus zwei Feldern eindeutig sein sollte, aber die eindeutige Einschränkung ist nicht in der Tabelle eingerichtet, so dass ich alle Zeilen finden muss, die die Einschränkung selbst mit SQL verletzen. Leider sind meine mageren SQL-Kenntnisse nicht für die Aufgabe geeignet.SQL: Wie finde ich Dubletten basierend auf zwei Feldern?
Meine Tabelle hat drei Spalten, die relevant sind: entity_id, station_id und obs_year. Für jede Zeile sollte die Kombination von stations_id und obs_year eindeutig sein, und ich möchte herausfinden, ob es Zeilen gibt, die dies verletzen, indem sie sie mit einer SQL-Abfrage ausspülen.
Ich habe die folgende SQL (vorgeschlagen von this previous question) versucht, aber es funktioniert nicht für mich arbeiten (ich ORA-00918 Spalte zweideutig definiert):
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
Kann jemand vorschlagen, was ich falsch mache und/oder wie löst man das?
Vielen Dank für diese Antwort. Leider bekomme ich beim Aufruf eine "ORA-00923: FROM Schlüsselwort nicht gefunden wo erwartet" Nachricht. –
@James: versuchen Sie es jetzt – Quassnoi
In mssql in musste ein 'wie x' setzen (Name ist nicht wirklich wichtig) hinter der FROM() - Paranthesis, damit es funktioniert. Gute Antwort! – Mafii