tôi có một cơ sở dữ liệu PostgreSQL với 4 bảng:bảng Gia nhập nếu tham chiếu tồn tại
Bảng A
---------------------------
| ID | B_ID | C_ID | D_ID |
---------------------------
| 1 | 1 | NULL | NULL |
---------------------------
| 2 | NULL | 1 | NULL |
---------------------------
| 3 | 2 | 2 | 1 |
---------------------------
| 4 | NULL | NULL | 2 |
---------------------------
Bảng B
-------------
| ID | DATA |
-------------
| 1 | 123 |
-------------
| 2 | 456 |
-------------
Bảng C
-------------
| ID | DATA |
-------------
| 1 | 789 |
-------------
| 2 | 102 |
-------------
Bảng D
-------------
| ID | DATA |
-------------
| 1 | 654 |
-------------
| 2 | 321 |
-------------
Tôi đang cố gắng để lấy một tập kết quả đó đã gia nhập dữ liệu từ bảng B và các dữ liệu từ bảng C, chỉ khi một trong những gian hàng ID không phải là null.
SELECT "Table_A"."ID", "Table_A"."ID_B", "Table_A"."ID_C", "Table_A"."ID_D", "Table_B"."DATA", "Table_C"."DATA"
FROM "Table_A"
LEFT JOIN "Table_B" on "Table_A"."ID_B" = "Table_B"."ID"
LEFT JOIN "Table_C" on "Table_A"."ID_C" = "Table_C"."ID"
WHERE "Table_A"."ID_B" IS NOT NULL OR "Table_A"."ID_C" IS NOT NULL;
Điều này được khuyến nghị hay tôi nên chia nhỏ điều này trong nhiều truy vấn?
Có cách nào để thực hiện kết nối bên trong giữa các bảng này không?
Kết quả tôi mong đợi là:
-------------------------------------------------
| ID | ID_B | ID_C | ID_D | DATA (B) | DATA (C) |
-------------------------------------------------
| 1 | 1 | NULL | NULL | 123 | NULL |
-------------------------------------------------
| 2 | NULL | 1 | NULL | NULL | 789 |
-------------------------------------------------
| 3 | 2 | 2 | NULL | 456 | 102 |
-------------------------------------------------
EDIT:ID_B
, ID_C
, ID_D
là chìa khóa ngoại đến bảng table_b
, table_c
, table_d
Tôi đã chỉnh sửa câu trả lời của mình và thêm kết quả tôi mong đợi. – wiizzard
Bạn không hiển thị các ràng buộc FK. Bảng table_a.id_b và table_a.id_c FK có đến các bảng B và C không? (có vẻ như họ đang có, nhưng điều này không được đề cập trong câu hỏi) – wildplasser
Bạn nói đúng. Họ là FK. – wiizzard