Tabel filteren voordat Left Join wordt toegepast

Ik heb 2 tabellen, ik wil de 1 tabel filteren voordatde 2 tabellen worden samengevoegd.

Klantentabel:

  ╔══════════╦═══════╗
   ║ Customer ║ State ║
   ╠══════════╬═══════╣
   ║ A        ║ S     ║
   ║ B        ║ V     ║
   ║ C        ║ L     ║
   ╚══════════╩═══════╝

Invoertabel:

  ╔══════════╦═══════╦══════════╗
   ║ Customer ║ Entry ║ Category ║
   ╠══════════╬═══════╬══════════╣
   ║ A        ║  5575 ║ D        ║
   ║ A        ║  6532 ║ C        ║
   ║ A        ║  3215 ║ D        ║
   ║ A        ║  5645 ║ M        ║
   ║ B        ║  3331 ║ A        ║
   ║ B        ║  4445 ║ D        ║
   ╚══════════╩═══════╩══════════╝

Ik wil Left Join gebruiken, zodat ik alle records uit de tabel Klant krijg, ongeacht of er gerelateerde records in de tabel Entry staan. Ik wil echter filteren op categorie D in de invoertabel vóór de join.

Gewenste resultaten:

  ╔══════════╦═══════╦═══════╗
   ║ Customer ║ State ║ Entry ║
   ╠══════════╬═══════╬═══════╣
   ║ A        ║ S     ║  5575 ║
   ║ A        ║ S     ║  3215 ║
   ║ B        ║ V     ║  4445 ║
   ║ C        ║ L     ║  NULL ║
   ╚══════════╩═══════╩═══════╝

Als ik de volgende vraag zou doen:

  SELECT Customer.Customer, Customer.State, Entry.Entry
   FROM Customer
   LEFT JOIN Entry
   ON Customer.Customer=Entry.Customer
   WHERE Entry.Category='D'

Dit zou het laatste record eruit filteren.

Dus ik wil alle rijen van de linkertabel en deze samenvoegen met de invoertabel die is gefilterd op categorie D.

Bij voorbaat dank aan alle hulp!!


Antwoord 1, autoriteit 100%

Je moet het WHEREfilter verplaatsen naar de JOINvoorwaarde:

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

Bekijk SQL Fiddle met demo


Antwoord 2, autoriteit 22%

Je zou ook kunnen doen:

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 hier


Antwoord 3

Of…

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'

Other episodes