sql >> Database >  >> RDS >> Sqlserver

Is te veel Left Joins een codegeur?

Het is een volkomen legitieme oplossing voor sommige ontwerpen.

Stel dat u een hiërarchie heeft van één-op-veel relaties zoals Customer - Order - Basket - Item - Price , enz., die op elk niveau niet kan worden ingevuld:een Customer heeft mogelijk geen Orders , een Order mag geen Baskets . hebben , enz.

In dit geval geef je iets uit als:

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

Merk op dat het in sommige gevallen inefficiënt kan zijn en kan worden vervangen door EXISTS of NOT EXISTS (als u er alleen achter wilt komen dat de corresponderende records wel of niet bestaan ​​in andere tabellen).

Zie dit artikel in mijn blog voor prestatiedetails:



  1. Barman gebruiken om een ​​back-up te maken van PostgreSQL - een overzicht

  2. Postgres natuurlijke volgorde door

  3. Hoe de Meridiem Indicator (AM/PM) toe te voegen aan een tijdwaarde in Oracle

  4. Wijzig SQL-tabel - sta NULL-kolomwaarde toe