J'ai 2 tables, je veux filtrer la table 1 avant les 2 tables sont jointes.
Tableau client:
╔══════════╦═══════╗
║ Customer ║ State ║
╠══════════╬═══════╣
║ A ║ S ║
║ B ║ V ║
║ C ║ L ║
╚══════════╩═══════╝
Table d'entrée:
╔══════════╦═══════╦══════════╗
║ Customer ║ Entry ║ Category ║
╠══════════╬═══════╬══════════╣
║ A ║ 5575 ║ D ║
║ A ║ 6532 ║ C ║
║ A ║ 3215 ║ D ║
║ A ║ 5645 ║ M ║
║ B ║ 3331 ║ A ║
║ B ║ 4445 ║ D ║
╚══════════╩═══════╩══════════╝
OK, je souhaite joindre à gauche afin d'obtenir tous les enregistrements de la table Client, qu'il y ait ou non des enregistrements liés dans la table Entrée. Cependant, je souhaite filtrer la catégorie D dans la table d’entrée avant la jointure .
Les résultats souhaités:
╔══════════╦═══════╦═══════╗
║ Customer ║ State ║ Entry ║
╠══════════╬═══════╬═══════╣
║ A ║ S ║ 5575 ║
║ A ║ S ║ 3215 ║
║ B ║ A ║ 4445 ║
║ C ║ L ║ NULL ║
╚══════════╩═══════╩═══════╝
Si je devais faire la requête suivante:
SELECT Customer.Customer, Customer.State, Entry.Entry
FROM Customer
LEFT JOIN Entry
ON Customer.Customer=Entry.Customer
WHERE Entry.Category='D'
Cela filtrerait le dernier enregistrement.
Je souhaite donc que toutes les lignes de la table de gauche soient jointes à la table d’entrée filtrée dans la catégorie D.
Merci à toute aide à l'avance!
Vous devez déplacer le filtre WHERE
vers la condition JOIN
:
SELECT c.Customer, c.State, e.Entry
FROM Customer c
LEFT JOIN Entry e
ON c.Customer=e.Customer
AND e.Category='D'
Voir SQL Fiddle avec Demo
Vous pouvez aussi faire:
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 ici
Ou...
SELECT c.Customer, c.State, e.Entry
FROM Customer c
LEFT JOIN Entry e
ON c.Customer=e.Customer
WHERE e.Category IS NULL or e.Category='D'