mam bazy PostgreSQL z 4 tabelach:łączące tabeli, jeśli występuje odniesienie
Tabela A
---------------------------
| ID | B_ID | C_ID | D_ID |
---------------------------
| 1 | 1 | NULL | NULL |
---------------------------
| 2 | NULL | 1 | NULL |
---------------------------
| 3 | 2 | 2 | 1 |
---------------------------
| 4 | NULL | NULL | 2 |
---------------------------
Tabela B
-------------
| ID | DATA |
-------------
| 1 | 123 |
-------------
| 2 | 456 |
-------------
Tabela C
-------------
| ID | DATA |
-------------
| 1 | 789 |
-------------
| 2 | 102 |
-------------
Tabela D
-------------
| ID | DATA |
-------------
| 1 | 654 |
-------------
| 2 | 321 |
-------------
Próbuję pobrać zestaw wyników, która dołączyła do danych z tabeli B i dane z tabeli C, tylko jeśli jeden z identyfikatorów stoisk nie jest 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;
Czy jest to zalecane, czy lepiej podzielić to na kilka zapytań?
Czy istnieje sposób połączenia wewnętrznego między tymi tabelami?
Wynik Spodziewam się:
-------------------------------------------------
| 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
są klucze obce do tabel table_b
, table_c
, table_d
Edytowałem swoją odpowiedź i dodałem wynik, którego oczekuję. – wiizzard
Nie pokazałeś więzów FK. Czy table_a.id_b i table_a.id_c FK do tabel B i C? (wydaje się, że są, ale nie jest to wspomniane w pytaniu) – wildplasser
Masz rację. Są to FK. – wiizzard