Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Troppi Left Join sono un odore di codice?

È 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: