Để hiểu lý do tại sao bạn không nhận được bất kỳ kết quả khi TableC
không có hồ sơ, bạn cần phải tìm hiểu một chút về THAM GIA loại trong SQL.
Về cơ bản, khi bạn phát hành truy vấn
TableA A JOIN TableB B ON A.id = B.a_id
bạn đang nói với cơ sở dữ liệu để nhìn vào cả hai TableA
và TableB
và lấy tất cả các cặp của hàng đáp ứng các gia vị (A.id = B.a_id). Do đó, nếu TableB
trống, cơ sở dữ liệu không thể tìm thấy và cặp của các hàng có tiêu chí được đề cập trước.
Loại JOIN này được gọi là INNER JOIN và đây là loại hoạt động nối phổ biến nhất được sử dụng.
Trong trường hợp của bạn, bạn muốn lấy tất cả hàng từ TableA X TableB
và tất cả hàng có liên quan từ TableC
, nếu hàng như vậy tồn tại (dựa trên tham gia predictate "A.id = C.a_id". Đây là trường hợp Hai loại phổ biến nhất của sự tham gia như vậy là LEFT JOIN (bao gồm tất cả các hàng từ bảng bên trái) và RIGHT JOIN (bao gồm tất cả các hàng từ bảng bên phải). trường hợp, truy vấn của bạn phải là:
SELECT A.*
FROM
(TableA A JOIN Table B B ON A.id = B.a_id)
LEFT JOIN TableC C ON A.id = C.a_ID
tôi sẽ đề nghị để có một cái nhìn tại trang relevant Wikipedia, nếu bạn muốn biết thêm về các loại tham gia trong SQL
Sửa
Bằng cách làm theo cùng một logic, nếu bạn muốn có tất cả hàng từ TableA
và chỉ có các hàng có liên quan từ các bảng TableB
và TableC
(nếu chúng tồn tại), truy vấn của bạn sẽ trở thành:
SELECT A.*
FROM
(TableA A LEFT JOIN Table B B ON A.id = B.a_id)
LEFT JOIN TableC C ON A.id = C.a_ID
+1 - Trông tốt với tôi, ngoài việc có một thiếu "ON" giữa "Tab leC C "và" (A.id " –