sql >> Databasteknik >  >> RDS >> Sqlserver

Luktar för många Left Joins en kod?

Det är en helt legitim lösning för vissa mönster.

Säg att du har en hierarki av en-till-många-relationer som Customer - Order - Basket - Item - Price , etc., som kan fyllas i på valfri nivå:en Customer kanske inte har några Orders , en Order kan inte ha några Baskets osv.

I det här fallet utfärdar du något som:

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

Observera att det kan vara ineffektivt i vissa fall och kan ersättas med EXISTS eller NOT EXISTS (om du bara vill ta reda på att motsvarande poster finns eller inte finns i andra tabeller).

Se den här artikeln i min blogg för information om prestanda:



  1. De bästa svaren på 5 brännande frågor om COALESCE-funktionen i SQL Server

  2. Använda Microsoft Access med Power BI

  3. Uppgradera PostgreSQL från 9.6 till 10.0 på Ubuntu 16.10

  4. JPA infogar inte i databasen, varför?