Това е напълно законно решение за някои проекти.
Да кажем, че имате йерархия от отношения "един към много" като Customer
- Order
- Basket
- Item
- Price
и т.н., които могат да бъдат непопълнени на всяко ниво:Customer
може да няма Orders
, Order
не може да има Baskets
и т.н.
В този случай издавате нещо като:
SELECT *
FROM Customer c
LEFT OUTER JOIN
Order o
ON o.CustomerID = c.ID
LEFT OUTER JOIN
Basket b
ON b.OrderID = c.ID
…
Имайте предвид, че може да е неефективно в някои случаи и може да бъде заменено с EXISTS
или NOT EXISTS
(ако искате само да разберете дали съответните записи съществуват или не съществуват в други таблици).
Вижте тази статия в моя блог за подробности за ефективността:
- Намиране на незавършени поръчки
- как да се възползвате от замяната на
LEFT JOIN
е сNOT EXISTS