È una soluzione perfettamente legittima per alcuni progetti.
Supponi di avere una gerarchia di relazioni uno-a-molti come Customer
- Order
- Basket
- Item
- Price
, ecc., che possono essere incompiuti a qualsiasi livello:un Customer
potrebbe non avere Orders
, un Order
non può avere Baskets
, ecc.
In questo caso emetti qualcosa come:
SELECT *
FROM Customer c
LEFT OUTER JOIN
Order o
ON o.CustomerID = c.ID
LEFT OUTER JOIN
Basket b
ON b.OrderID = c.ID
…
Nota che potrebbe essere inefficiente in alcuni casi e potrebbe essere sostituito con EXISTS
o NOT EXISTS
(se vuoi solo capire che i record corrispondenti esistono o non esistono in altre tabelle).
Vedi questo articolo nel mio blog per i dettagli sulle prestazioni:
- Trovare ordini incompleti
- come trarre vantaggio dalla sostituzione di
LEFT JOIN
's conNOT EXISTS