sql - varias - Tabla de filtros antes de aplicar la combinación izquierda
left join (2)
Tengo 2 tablas, quiero filtrar la 1 tabla antes de que las 2 tablas estén unidas.
Tabla de clientes:
╔══════════╦═══════╗
║ Customer ║ State ║
╠══════════╬═══════╣
║ A ║ S ║
║ B ║ V ║
║ C ║ L ║
╚══════════╩═══════╝
Tabla de entrada:
╔══════════╦═══════╦══════════╗
║ Customer ║ Entry ║ Category ║
╠══════════╬═══════╬══════════╣
║ A ║ 5575 ║ D ║
║ A ║ 6532 ║ C ║
║ A ║ 3215 ║ D ║
║ A ║ 5645 ║ M ║
║ B ║ 3331 ║ A ║
║ B ║ 4445 ║ D ║
╚══════════╩═══════╩══════════╝
OK Quiero unirme a la izquierda para obtener todos los registros de la tabla Cliente sin importar si hay registros relacionados en la tabla de entrada. Sin embargo, quiero filtrar en la categoría D en la tabla de entrada antes de la unión .
Resultados deseados:
╔══════════╦═══════╦═══════╗
║ Customer ║ State ║ Entry ║
╠══════════╬═══════╬═══════╣
║ A ║ S ║ 5575 ║
║ A ║ S ║ 3215 ║
║ B ║ A ║ 4445 ║
║ C ║ L ║ NULL ║
╚══════════╩═══════╩═══════╝
Si tuviera que hacer la siguiente consulta:
SELECT Customer.Customer, Customer.State, Entry.Entry
FROM Customer
LEFT JOIN Entry
ON Customer.Customer=Entry.Customer
WHERE Entry.Category=''D''
Esto filtraría el último registro.
Así que quiero todas las filas de la tabla de la izquierda y unirla a la tabla de entrada filtrada en la categoría D.
Gracias a cualquier ayuda de antemano!
Debe mover el filtro WHERE
a la condición JOIN
:
SELECT c.Customer, c.State, e.Entry
FROM Customer c
LEFT JOIN Entry e
ON c.Customer=e.Customer
AND e.Category=''D''
También podrías hacer:
SELECT c.Customer, c.State, e.Entry
FROM Customer AS c
LEFT JOIN (SELECT * FROM Entry WHERE Category=''D'') AS e
ON c.Customer=e.Customer
SQL Fiddle here