C'est une solution parfaitement légitime pour certaines conceptions.
Supposons que vous ayez une hiérarchie de relations un-à-plusieurs comme Customer
- Order
- Basket
- Item
- Price
, etc., qui peut être vide à n'importe quel niveau :un Customer
peut n'avoir aucune Orders
, une Order
ne peut pas avoir de Baskets
, etc.
Dans ce cas, vous émettez quelque chose comme :
SELECT *
FROM Customer c
LEFT OUTER JOIN
Order o
ON o.CustomerID = c.ID
LEFT OUTER JOIN
Basket b
ON b.OrderID = c.ID
…
Notez qu'il peut être inefficace dans certains cas et peut être remplacé par EXISTS
ou NOT EXISTS
(si vous voulez seulement savoir si les enregistrements correspondants existent ou n'existent pas dans d'autres tables).
Consultez cet article sur mon blog pour plus de détails sur les performances :
- Rechercher des commandes incomplètes
- comment bénéficier du remplacement de
LEFT JOIN
avecNOT EXISTS