05.12.2012, Vladimír Klaus, navštíveno 13235x

MS Access
SQL

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.

SQL obrázek

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

SQL obrázek