Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL формат за присъединяване - вложени вътрешни присъединявания

За четливост преструктурирах заявката... започвайки с очевидно най-горното ниво, което е Table1, което след това се свързва с Table3, а след това table3 се свързва с table2. Много по-лесно за следване, ако следвате веригата от връзки.

Сега да отговоря на въпроса ви. Получавате голям брой в резултат на декартово произведение. За всеки запис в Таблица1, който съвпада с Таблица3, ще имате X * Y. Тогава за всяко съвпадение между таблица3 и Таблица2 ще има същото въздействие... Y * Z... Така че вашият резултат само за един възможен идентификатор в таблица 1 може да има X * Y * Z записи.

Това се основава на това, че не знаете как е нормализацията или съдържанието за вашите таблици... дали ключът е ОСНОВЕН ключ или не..

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

И така, присъединяването на Таблица 1 към Таблица 3 ще доведе (в този сценарий) до 12 записа (всеки в 1, съединен с всеки в 3). След това всичко това отново, умножено по всеки съвпадащ запис в таблица 2 (5 записа)... общо 60 ( 3 tbl1 * 4 tbl3 * 5 tbl2 ) брой ще бъде върнат.

Така че сега вземете това и разширете въз основа на вашите 1000 записи и ще видите как една объркана структура може да задуши крава (така да се каже) и да убие производителността.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Коментираният код извежда грешка

  2. Вземете списък с бази данни от SQL Server

  3. SQL Server:Тъмната страна на NVARCHAR

  4. Как да преименувате име на колона или име на таблица в SQL Server - SQL Server / T-SQL Урок, част 36

  5. Композитен първичен ключ sql връзка