sql >> Database >  >> RDS >> Sqlserver

SQL-join-indeling - geneste innerlijke joins

Voor de leesbaarheid heb ik de query geherstructureerd... beginnend met het schijnbare hoogste niveau dat Tabel1 is, dat vervolgens aansluit op Tabel3, en vervolgens tabel3 op tabel2. Veel gemakkelijker te volgen als je de keten van relaties volgt.

Om nu je vraag te beantwoorden. U krijgt een grote telling als resultaat van een Cartesiaans product. Voor elk record in Tabel1 dat overeenkomt met Tabel3 heb je X * Y. Dan zal voor elke match tussen tabel3 en Tabel2 dezelfde impact hebben... Y * Z... Dus je resultaat voor slechts één mogelijke ID in tabel 1 kan X * Y * Z-records hebben.

Dit is gebaseerd op het niet weten hoe de normalisatie of inhoud is voor uw tabellen... of de sleutel een PRIMAIRE sleutel is of niet..

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

Dus het samenvoegen van Tabel 1 met Tabel 3 zal resulteren (in dit scenario) met 12 records (elk in 1 samengevoegd met elk in 3). Dan, dat alles opnieuw maal elk overeenkomend record in tabel 2 (5 records)... totaal van 60 (3 tbl1 * 4 tbl3 * 5 tbl2) zou worden geretourneerd.

Dus neem dat nu en breid uit op basis van je duizenden records en je ziet hoe een verknoeide structuur een koe zou kunnen verstikken (om het zo te zeggen) en de prestaties zou kunnen doden.

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. Wat is het doel van het gebruik van OPTION(MAXDOP 1) in SQL Server?

  2. Hoe het interval tussen twee datums in PostgreSQL te vinden

  3. Hoe INFO-berichten te onderdrukken bij het uitvoeren van psql-scripts

  4. SQL:rijen met samengevatte waarden invoegen