Registros no coincidentes

Quisiera saber si hay una sentencia o función que me permita seleccionar los registros que están en una tabla1 pero no en tabla2, o sea los no coincidentes lo contrario de select * from tabla1 where tabla1. Codigo=tabla2. Código, no necesito los que están en ambas sino los que no están !

1 Respuesta

Respuesta
1
Es sencillo, tienes que hacer un outer join y seleccionar aquellos registros que no estén en la segunda. Imaginemos que el campo clave es clave en las dos, esta sería la select:
select tabla1.clave
from tabla1, tabla2
where tabla1.clave = tabla2.clave(+)
and tabla2.clave is null
Otra forma de hacerlo es la siguiente:
select clave from tabla
where clave not exists (select clave from tabla2 where clave = tabla1.clave)
Primero quiero agradecerte por la atención prestada a mi pregunta, he tratado de implementar las sentencias que me sugeriste, pero no he podido obtener los resultados esperados, ahora bien, la forma en que estoy realizando la consulta es la siguiente:
SELECT cod
FROM actividad
WHERE cod not in(select cod from zona where cod = actividad.cod)
Para obtener los códigos de la tabla actividad que no se encuentran en la tabla zona (campo común :cod), pero me encuentro con el problema que se tarda demasiado en realizar el query, puesto que las tablas tienen aprox entre 65mil y 70mil registros, quisiera saber cual es la forma más rápida de realizar esta operación, gracias.
A ver si tienes índices o claves primarias en las dos tablas, y que éstos sean obviamente, el campo común en cada una de las dos tablas. Si no es así, por cada registro que encuentra en la primera tiene que recorrer la tabla segunda entera, con lo que finalmente recorres 70.000 * 70.000 registros, o sea, 4.900.000.000 registros, y por eso te puede tardar tanto. Si ya tienes índices, quizás no se estén usando. Y sobre que no puedas usar la cláusula "not exists" no sé por qué es, pero es más rápida que el not in, aunque si tuviera índices no debería importar. ¿Qué motor de base de datos usas?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas