Rất khó để kể từ truy vấn của bạn cho dù bạn mong đợi dữ liệu được trả về dựa trên UNION, hoặc như một khung nhìn chứa các cột một cách rõ ràng. Điều này rõ ràng là có hiệu lực.
Hãy xem xét ví dụ sau đây:
TableA
ID Name RelatedID
1 John 2
2 Paul 1
TableB
ID Name RelatedID
1 Ringo 1
2 George 1
TableC
ID Name RelatedID
1 Bob 1
TableD
ID Name RelatedID
1 Kate NULL
Bây giờ, chạy truy vấn sau đây chống lại điều này:
SELECT ID, Tên TỪ TableA UNION ALL SELECT ID, Tên TỪ TableB UNION ALL CHỌN ID, Tên FROM BảngC UNION ALL ID CHỌN, Tên FROM BảngD
Kết quả này s trong kết quả sau:
1 John
2 Paul
1 Ringo
2 George
1 Bob
1 Kate
Đây có phải là những gì bạn đang theo dõi không? Nếu vậy, bạn sử dụng truy vấn UNION.
Bây giờ, nếu hiệu ứng bạn đang theo đuổi là phải có một cái nhìn riêng biệt của dữ liệu có liên quan, bạn có thể cần phải làm một cái gì đó như thế này:
SELECT A.ID MasterID, A.Name MasterName,
B.ID BandID, B.Name BandName,
C.ID BlackadderID, C.Name BlackadderName
D.ID BlackadderRealID, D.Name BlackadderRealName
FROM
TableA A
INNER JOIN
TableB B
ON
A.RelatedID = B.ID
INNER JOIN
TableC C
ON
B.RelatedID = C.ID
INNER JOIN
TableD D
ON
C.RelatedID = D.ID
này sẽ cho kết quả trong giao diện sau đây của dữ liệu:
MasterID MasterName BandID BandName BlackAdderID BlackAdderName BlackadderRealID BlackadderRealName
1 John 2 George 1 Bob 1 Kate
2 Paul 1 Ringo 1 Bob 1 Kate
bạn đang sử dụng máy chủ cơ sở dữ liệu nào? – ysth
Tôi không chắc chắn về thiết lập chính xác của bạn, nhưng nếu bạn có 4 bảng trùng lặp mà bạn muốn truy vấn với một liên kết, một bảng có cột loại có thể có ý nghĩa hơn. Trừ khi tất nhiên hệ thống đã tồn tại hoặc có những yếu tố khác. –