Để 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