Saltar al contenido

¿Cómo devolver filas de la tabla de la izquierda que no se encuentran en la tabla de la derecha?

Esta es la solución más completa que te podemos brindar, pero obsérvala detenidamente y analiza si se puede adaptar a tu proyecto.

Solución:

Prueba esto

SELECT f.*
FROM first_table f LEFT JOIN second_table s ON f.key=s.key
WHERE s.key is NULL

Para obtener más información, lea este artículo: Uniones en Sql Server

ingrese la descripción de la imagen aquí

Si está solicitando T-SQL, primero veamos los fundamentos. Aquí hay tres tipos de combinaciones, cada una con su propio conjunto de fases de procesamiento lógico como:

  1. A cross join es la más sencilla de todas. Implementa solo una fase de procesamiento de consultas lógicas, una Cartesian Product. Esta fase opera en las dos tablas proporcionadas como entradas para la unión y produce un producto cartesiano de las dos. Es decir, cada fila de una entrada se compara con todas las filas de la otra. Entonces, si tiene m filas en una tabla y n filas en la otra, obtiene m × n filas en el resultado.
  2. Entonces son Inner joins : Aplican dos fases de procesamiento de consultas lógicas: A Cartesian product entre las dos tablas de entrada como en una unión cruzada, y luego filters filas basadas en un predicado que especifique en ON cláusula (también conocida como Join condition).
  3. Luego viene el tercer tipo de uniones, Outer Joins:

    en un outer join, marca una tabla como preserved tabla usando las palabras clave LEFT OUTER JOIN, RIGHT OUTER JOIN, o FULL OUTER JOIN entre los nombres de las tablas. El OUTER la palabra clave es optional. El LEFT palabra clave significa que las filas de la left table se conservan; el RIGHT palabra clave significa que las filas en el right table se conservan; y el FULL palabra clave significa que las filas en both el left y right Se conservan tablas.

    La tercera fase de procesamiento de consultas lógicas de un outer join identifica las filas de la tabla conservada que no encontraron coincidencias en la otra tabla en función de la ON predicado. Esta fase agrega esas filas a la tabla de resultados producida por las dos primeras fases de la combinación y usa NULL marcas como marcadores de posición para el attributes desde el lado no conservado de la unión en esas filas exteriores.

Ahora, si miramos la pregunta: para devolver registros de la tabla de la izquierda que no se encuentran en la tabla de la derecha, use Left outer join y filtrar las filas con NULL valores para el attributes desde el lado derecho de la unión.

También me gusta usar NOT EXISTS. Cuando se trata de rendimiento, si se indexa correctamente, debería funcionar igual que LEFT JOIN o mejor. Además, es más fácil de leer.

SELECT Column1
FROM TableA a
WHERE NOT EXISTS ( SELECT Column1
                   FROM Tableb b
                   WHERE a.Column1 = b.Column1
                 )

Sección de Reseñas y Valoraciones

Más adelante puedes encontrar las notas de otros programadores, tú además puedes dejar el tuyo si dominas el tema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *