sql >> Databáze >  >> RDS >> Sqlserver

Formát spojení SQL - vnořená vnitřní spojení

Kvůli čitelnosti jsem restrukturalizoval dotaz... počínaje zdánlivě nejvyšší úrovní je Tabulka1, která se pak váže k Tabulce3, a pak se Tabulka3 váže k Tabulce2. Mnohem snazší sledovat, pokud budete sledovat řetězec vztahů.

Nyní, abych odpověděl na vaši otázku. Získáváte velký počet jako výsledek kartézského součinu. Pro každý záznam v tabulce 1, který se shoduje v tabulce 3, budete mít X * Y. Potom bude mít každá shoda mezi tabulkou 3 a tabulkou 2 stejný dopad... Y * Z... Takže váš výsledek pouze pro jedno možné ID v tabulce 1 může mít X * Y * Z záznamů.

To je založeno na tom, že nevíte, jaká je normalizace nebo obsah vašich tabulek... jestli je klíč PRIMÁRNÍ nebo ne..

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

Takže spojení tabulky 1 s tabulkou 3 bude mít za následek (v tomto scénáři) 12 záznamů (každý z 1 spojený s každým ze 3). Pak vše znovu krát každý odpovídající záznam v tabulce 2 (5 záznamů)... bude vráceno celkem 60 ( 3 tbl1 * 4 tbl3 * 5 tbl2 ).

Takže, teď to vezměte a rozšiřte na základě svých 1000 záznamů a uvidíte, jak by zpackaná struktura mohla udusit krávu (takříkajíc) a zabít výkon.

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. Jak dostanu 50 MB zip soubor se 600 MB xml souborem do mysql datatable?

  2. Concat skupiny v SQL Server

  3. Existuje v SQL kombinace LIKE a IN?

  4. AWS DMS s CDC. Aktualizační záznamy obsahují pouze aktualizované pole. Jak zahrnout všechny?