sql >> Databasteknik >  >> RDS >> Sqlserver

SQL join-format - kapslade inre joins

För läsbarheten omstrukturerade jag frågan... med början med att den uppenbarligen översta nivån är Tabell1, som sedan knyter an till Tabell3, och sedan tabell3 knyter an till Tabell2. Mycket lättare att följa om du följer kedjan av relationer.

Nu för att svara på din fråga. Du får ett stort antal som ett resultat av en kartesisk produkt. För varje post i tabell 1 som matchar i tabell 3 kommer du att ha X * Y. Sedan, för varje matchning mellan tabell 3 och tabell 2 kommer att ha samma inverkan... Y * Z... Så ditt resultat för bara ett möjligt ID i tabell 1 kan ha X * Y * Z-poster.

Detta är baserat på att du inte vet hur normaliseringen eller innehållet är för dina tabeller... om nyckeln är en PRIMÄR nyckel eller inte.

Ex:
Table 1       
DiffKey    Other Val
1          X
1          Y
1          Z

Table 3
DiffKey   Key    Key2  Tbl3 Other
1         2      6     V
1         2      6     X
1         2      6     Y
1         2      6     Z

Table 2
Key    Key2   Other Val
2      6      a
2      6      b
2      6      c
2      6      d
2      6      e

Så, tabell 1 ansluter till tabell 3 kommer att resultera (i detta scenario) med 12 poster (var och en av 1 sammanfogad med var och en av 3). Allt det där igen gånger varje matchad post i tabell 2 (5 poster)... totalt 60 ( 3 tbl1 * 4 tbl3 * 5 tbl2 ) räkning skulle returneras.

Så nu, ta det och expandera baserat på dina 1000-tals rekord och du ser hur en trasslig struktur kan kväva en ko (så att säga) och döda prestanda.

SELECT
      COUNT(*)
   FROM
      Table1 
         INNER JOIN Table3
            ON Table1.DifferentKey = Table3.DifferentKey
            INNER JOIN Table2
               ON Table3.Key =Table2.Key
               AND Table3.Key2 = Table2.Key2 


  1. Hur man använder SignalR i en webbfarm, med SQL-server som bakplan

  2. Hur make_date() fungerar i PostgreSQL

  3. PHP och SQL Hashing Hjälp:Vad gör jag för fel?

  4. Om det finns uppdatering annars infoga i en fråga