05.12.2012, Vladimír Klaus, navštíveno 13307x
V mnoha případech dá LEFT JOIN stejné výsledky jako INNER JOIN. Máme třeba objednávky (je jich 22) a k nim chceme údaje o zákaznících. Výsledkem je tabulka, která má stále 22 řádek. Představme si ale situaci, že třeba díky nějaké interní chybě, někdo smaže zákazníka, ale nechá v systému jeho objednávku.
Začneme základním dotazem, který opět spojí obě tabulky, ale už neřeší, zda k levému záznamu (objednávka) existuje i pravý záznam (zákazník).
SELECT * FROM Objednavky
LEFT JOIN Zakaznici ON Objednavky.IdZakaznika = Zakaznici.ID
Výsledkem je velmi podobná tabulka jako u INNER JOIN, pouze obsahuje dvě řádky navíc a) díky neexistujícímu zákazníkovi s ID = 23 a b) díky nevyplněnému ID zákazníka u objednávky.
Takový výsledek je sice hezký, ale moc nám nepomůže, možná spíš uškodí – představme si, že chceme tyto informace použít pro tisk dopisů. Kam asi dorazí poslední dopis?
Mnohem lepší bude nejprve zjistit, zda taková situace nastane a nějak ji vyřešit. A pro dopisy stejně pak použijeme INNER JOIN.
Tímto dotazem vyfiltrujeme ty záznamy, u kterých je ID v tabulce zákazníků prázdné/nevyplněné.
SELECT * FROM Objednavky
LEFT JOIN Zakaznici ON Objednavky.IdZakaznika = Zakaznici.ID
WHERE Zakaznici.ID IS NULL