94 votes

Filtrer la table avant d'appliquer la jointure gauche

J'ai 2 tableaux, je veux filtrer le premier tableau. avant les 2 tables sont réunies.

Table des clients :

    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        

Je veux faire une jointure gauche pour obtenir tous les enregistrements de la table Customer, qu'il y ait ou non des enregistrements liés dans la table Entry. Cependant, je veux filtrer sur la catégorie D dans la table des entrées. avant la jointure .

Résultats souhaités :

    Customer  State  Entry 

    A         S       5575 
    A         S       3215 
    B         V       4445 
    C         L       NULL 

Si je faisais 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 permettrait de filtrer le dernier enregistrement.

Je veux donc toutes les lignes de la table de gauche et les joindre à la table d'entrée filtrée sur la catégorie D.

Merci d'avance pour toute aide !

139voto

bluefeet Points 105508

Vous devez déplacer le WHERE au filtre JOIN condition :

SELECT c.Customer, c.State, e.Entry
FROM Customer c
LEFT JOIN Entry e
   ON c.Customer=e.Customer
   AND e.Category='D'

Voir Bricolage SQL avec démo

31voto

Jeff Rosenberg Points 3244

Vous pouvez aussi le 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

Fiddle SQL aquí

0voto

c z Points 1188

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'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X