Ho righe in una tabella di database Oracle che dovrebbe essere univoca per una combinazione di due campi ma il vincolo univoco non è impostato sulla tabella, quindi ho bisogno di trovare tutte le righe che violano il vincolo utilizzando SQL. Sfortunatamente le mie scarse competenze SQL non sono all'altezza del compito.SQL: come trovare i duplicati in base a due campi?
La mia tabella ha tre colonne rilevanti: entity_id, station_id e obs_year. Per ogni riga, la combinazione di station_id e obs_year dovrebbe essere univoca, e voglio scoprire se ci sono righe che violano questa situazione svuotandole con una query SQL.
Ho provato il seguente SQL (suggerito da this previous question), ma non funziona per me (ho ORA-00918 colonna ambiguo definito):
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
Qualcuno può suggerire quello che sto facendo male e/o come risolvere questo?
Grazie mille per questa risposta. Sfortunatamente, quando eseguo questo, viene visualizzato un messaggio "ORA-00923: FROM keyword not found where expected". –
@James: prova ora – Quassnoi
In mssql in doveva mettere un 'as x' (il nome non ha molta importanza) dietro la parata di FROM() per farlo funzionare. Bella risposta! – Mafii