"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Una unión interna anula la inclusión de valores nulos de una unión externa?

¿Una unión interna anula la inclusión de valores nulos de una unión externa?

Publicado el 2025-03-13
Navegar:678

Does an INNER JOIN Override an OUTER JOIN's Inclusion of NULL Values?

Comprender la interacción de Inner and Outer se une en SQL

consultas SQL complejas con frecuencia emplean múltiples operaciones de unión, combinando diferentes tipos de unión. Una consideración clave es cómo la inclusión de valores nulos, una característica de las uniones externas, se ve afectada cuando se aplica posteriormente una unión interna.

cómo las uniones internas pueden afectar los resultados de la unión externa

una unión interna, por su naturaleza, solo devuelve filas donde se cumple la condición de unión en ambas tablas . Si una unión interna sigue una unión externa, y la condición de la unión interna se basa en columnas que podrían ser nulas (debido a la unión externa), filtra efectivamente filas donde esas columnas son nulas. Esto niega la inclusión de valores nulos que la unión externa proporcionó inicialmente.

ejemplo ilustrativo

examinemos un escenario:

SELECT *
FROM person
LEFT JOIN address ON person.address_id = address.id
INNER JOIN email ON person.email_id = email.id;

la izquierda unirse asegura que todas las filas de la tabla persona están incluidas, incluso si no hay entrada coincidente en dirección . Sin embargo, el interno se une con correo electrónico luego restringe los resultados solo a aquellas filas donde un correo electrónico de coincidencia email_id existe en ambos persona y correo electrónico . Filas de persona que tuvo una dirección de coincidencia dirección pero un nulo email_id se excluirá.

un escenario problemático y su solución

Considere esta consulta:

SELECT *
FROM person
LEFT JOIN address ON person.address_id = address.id
INNER JOIN city ON address.city_id = city.id;

aquí, el interno Join con city asume que dirección.city_id nunca es nulo. Si algunas direcciones carecen de city_id , esas filas (y asociadas persona se omitirán, alterando involuntariamente los resultados de la inicial izquierda unirse .

El enfoque correcto es usar otro izquierda Join en lugar del Inner Join :

SELECT *
FROM person
LEFT JOIN address ON person.address_id = address.id
LEFT JOIN city ON address.city_id = city.id;

Esto conserva la inclusión de la inicial izquierda unión , manejando correctamente los casos donde direcciones.city_id podría ser nulo. Esto asegura que todos los registros de personas persona estén incluidos, independientemente de si tienen una dirección o una ciudad asociada con ellos.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3