Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Est-ce qu'un trop grand nombre de Left Joins est une odeur de code ?

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 :