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 WHERE
filter verplaatsen naar de JOIN
voorwaarde:
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'