Jest to całkowicie uzasadnione rozwiązanie dla niektórych projektów.
Załóżmy, że masz hierarchię relacji jeden-do-wielu, taką jak Customer
- Order
- Basket
- Item
- Price
itp., które można wypełnić na dowolnym poziomie:Customer
może nie mieć Orders
, Order
nie może mieć Baskets
itp.
W takim przypadku wydajesz coś takiego:
SELECT *
FROM Customer c
LEFT OUTER JOIN
Order o
ON o.CustomerID = c.ID
LEFT OUTER JOIN
Basket b
ON b.OrderID = c.ID
…
Zauważ, że w niektórych przypadkach może to być nieefektywne i może zostać zastąpione przez EXISTS
lub NOT EXISTS
(jeśli chcesz tylko dowiedzieć się, czy odpowiednie rekordy istnieją lub nie istnieją w innych tabelach).
Zobacz ten artykuł na moim blogu, aby uzyskać szczegółowe informacje na temat wydajności:
- Znajdowanie niekompletnych zamówień
- jak skorzystać z zastąpienia
LEFT JOIN
jest zNOT EXISTS