Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Ist zu viele Left Joins ein Code-Geruch?

Es ist eine absolut legitime Lösung für einige Designs.

Angenommen, Sie haben eine Hierarchie von 1:n-Beziehungen wie Customer - Order - Basket - Item - Price , usw., die auf jeder Ebene leer sein können:ein Customer dürfen keine Orders haben , eine Order kann keine Baskets haben usw.

In diesem Fall geben Sie etwas aus wie:

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

Beachten Sie, dass es in einigen Fällen ineffizient sein kann und durch EXISTS ersetzt werden kann oder NOT EXISTS (wenn Sie nur herausfinden möchten, ob die entsprechenden Datensätze in anderen Tabellen existieren oder nicht existieren).

Einzelheiten zur Leistung finden Sie in diesem Artikel in meinem Blog: