sql >> Base de Datos >  >> RDS >> Sqlserver

¿Demasiadas uniones a la izquierda son un olor a código?

Es una solución perfectamente legítima para algunos diseños.

Digamos que tiene una jerarquía de relaciones de uno a muchos como Customer - Order - Basket - Item - Price , etc., que se pueden vaciar en cualquier nivel:un Customer puede no tener Orders , un Order no puede tener Baskets , etc.

En este caso, emite algo como:

SELECT  *
FROM    Customer c
LEFT OUTER JOIN
        Order o
ON      o.CustomerID = c.ID
LEFT OUTER JOIN
        Basket b
ON      b.OrderID = c.ID
…

Tenga en cuenta que puede ser ineficiente en algunos casos y puede ser reemplazado por EXISTS o NOT EXISTS (si solo desea averiguar si los registros correspondientes existen o no existen en otras tablas).

Consulte este artículo en mi blog para obtener detalles sobre el rendimiento: