varios varias valores una tabla registros mismo left filtros filtrar dinamicos datos condiciones condicion con campo busqueda buscar sql join filter where

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''

Ver SQL Fiddle con demostración


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