Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Định dạng nối SQL - các phép nối bên trong lồng nhau

Để dễ đọc, tôi đã cấu trúc lại truy vấn ... bắt đầu với cấp cao nhất rõ ràng là Table1, sau đó liên kết với Table3, rồi table3 liên kết với table2. Dễ theo dõi hơn nhiều nếu bạn tuân theo chuỗi các mối quan hệ.

Bây giờ để trả lời câu hỏi của bạn. Bạn đang nhận được một số lượng lớn do kết quả của một tích Descartes. Đối với mỗi bản ghi trong Bảng1 khớp với Bảng 3, bạn sẽ có X * Y. Sau đó, đối với mỗi trận đấu giữa Bảng3 và Bảng2 sẽ có tác động giống nhau ... Y * Z ... Vì vậy, kết quả của bạn chỉ cho một ID có thể có trong bảng 1 có thể có bản ghi X * Y * Z.

Điều này dựa trên việc không biết cách chuẩn hóa hoặc nội dung cho các bảng của bạn ... nếu khóa có phải là khóa CHÍNH hay không ..

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

Vì vậy, việc kết hợp Bảng 1 với Bảng 3 sẽ dẫn đến (trong trường hợp này) có 12 bản ghi (mỗi bản trong 1 nối với mỗi bản trong 3). Sau đó, tất cả lần nữa mỗi bản ghi phù hợp trong bảng 2 (5 bản ghi) ... tổng số 60 (3 tbl1 * 4 tbl3 * 5 tbl2) sẽ được trả về.

Vì vậy, bây giờ, hãy lấy điều đó và mở rộng dựa trên 1000 bản ghi của bạn và bạn sẽ thấy cách một cấu trúc lộn xộn có thể làm nghẹt thở một con bò (nói như vậy) và giết chết hiệu suất.

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. Tham gia 100 bảng

  2. SQL Server Express so với express localdb

  3. T-SQL Cast so với Convert

  4. Sử dụng bootstrap modalpopup trong ASP.NET

  5. Tìm kết hợp chính xác bằng cách sử dụng tìm kiếm toàn văn