Det är en helt legitim lösning för vissa mönster.
Säg att du har en hierarki av en-till-många-relationer som Customer
- Order
- Basket
- Item
- Price
, etc., som kan fyllas i på valfri nivå:en Customer
kanske inte har några Orders
, en Order
kan inte ha några Baskets
osv.
I det här fallet utfärdar du något som:
SELECT *
FROM Customer c
LEFT OUTER JOIN
Order o
ON o.CustomerID = c.ID
LEFT OUTER JOIN
Basket b
ON b.OrderID = c.ID
…
Observera att det kan vara ineffektivt i vissa fall och kan ersättas med EXISTS
eller NOT EXISTS
(om du bara vill ta reda på att motsvarande poster finns eller inte finns i andra tabeller).
Se den här artikeln i min blogg för information om prestanda:
- Hitta ofullständiga beställningar
- hur man drar nytta av att ersätta
LEFT JOIN
är medNOT EXISTS