Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Czy zbyt wiele lewych złączeń to zapach kodu?

Jest to całkowicie uzasadnione rozwiązanie dla niektórych projektów.

Załóżmy, że masz hierarchię relacji jeden-do-wielu, taką jak Customer - Order - Basket - Item - Price itp., które można wypełnić na dowolnym poziomie:Customer może nie mieć Orders , Order nie może mieć Baskets itp.

W takim przypadku wydajesz coś takiego:

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

Zauważ, że w niektórych przypadkach może to być nieefektywne i może zostać zastąpione przez EXISTS lub NOT EXISTS (jeśli chcesz tylko dowiedzieć się, czy odpowiednie rekordy istnieją lub nie istnieją w innych tabelach).

Zobacz ten artykuł na moim blogu, aby uzyskać szczegółowe informacje na temat wydajności:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. EF5:Nie można dołączyć pliku „{0}” jako bazy danych „{1}”

  2. Wykonywać funkcję z wartościami przechowywanymi w tabeli w wielu wierszach?

  3. Co oznacza Poważny błąd w bieżącym poleceniu. Ewentualne wyniki należy odrzucić. Błąd SQL Azure oznacza?

  4. Tworzenie Entity Framework Model obejmuje wiele baz danych

  5. SQL wybierz wiele wierszy w jednej kolumnie