Tengo filas en una tabla de base de datos Oracle que deben ser únicas para una combinación de dos campos pero la restricción única no está configurada en la tabla, así que necesito encontrar todas las filas que violen la restricción yo mismo usando SQL. Lamentablemente, mis escasas habilidades SQL no están a la altura de la tarea.SQL: ¿Cómo encontrar duplicados basados en dos campos?
Mi tabla tiene tres columnas que son relevantes: entity_id, station_id y obs_year. Para cada fila, la combinación de station_id y obs_year debe ser única, y quiero averiguar si hay filas que violan esto al eliminarlas con una consulta SQL.
He probado el siguiente código SQL (sugerido por this previous question), pero no funciona para mí (me da ORA-00918 columna ambiguamente definido):
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
Puede alguien sugerir lo que estoy haciendo mal y/o cómo resolver esto?
Muchas gracias por esta respuesta. Lamentablemente, cuando ejecuto esto recibo un mensaje "ORA-00923: palabra clave FROM no encontrada donde esperaba". –
@James: inténtalo ahora – Quassnoi
En mssql tenía que poner 'como x' (el nombre no importa) detrás de la paranthesis FROM() para que funcione. ¡Gran respuesta! – Mafii