Diferencia entre el Estado y en donde Condición Únase
-
12-09-2019 - |
Pregunta
Puede alguien por favor me explique por qué las dos consultas siguientes resultados diferentes?
SELECT
o.*
FROM
Customer c
LEFT JOIN
[Order] o ON o.CustomerID = c.CustomerID AND o.OrderType = 'Cash'
WHERE
c.Country = 'USA'
SELECT
o.*
FROM
Customer c
LEFT JOIN
[Order] o ON o.CustomerID = c.CustomerID
WHERE
c.Country = 'USA'
AND
o.OrderType = 'Cash'
Gracias.
Solución
La primera de ellas permite que el fin de ser NULL, porque es una combinación izquierda.
El segundo no lo hace, ya que comprueba el valor de o.OrderType después de la unión.
El equivalente sería (suponiendo OrderType no puede ser nulo)
SELECT
o.*
FROM
Customer c
LEFT JOIN
[Order] o ON o.CustomerID = c.CustomerID
WHERE
c.Country = 'USA'
AND
(o.OrderType = 'Cash' OR o.OrderType IS NULL)
Otros consejos
Se unirse a la IZQUIERDA.
En el primer caso puede obtener menos registros, ya que sólo un cliente pasará a través de la condición en la que si sus órdenes son filtrados por la condición de efectivo en Unir.
En el segundo ejemplo, más pares cliente orden pasarán, y más pueden ser la izquierda después de los filtros dónde.
Asegúrese de que necesita realmente la combinación izquierda, y si es así, entonces asegúrese de cuál de estos dos semánticas que necesita en este caso.
Una gran explicación:
preguntar a los expertos: Terry Purcell en combinaciones externas
En el primer ejemplo, condición de filtro se aplica primero para filtrar las órdenes de tipo de orden efectivo y luego se unió con tabla de clientes.
En el segundo ejemplo, dos tablas se unen y se aplica la condición después se filtró. Por lo tanto el resultado será diferente.