ho ottenuto un database PostgreSQL con 4 tavoli:tabelle Unire se il riferimento esiste
Tabella A
---------------------------
| ID | B_ID | C_ID | D_ID |
---------------------------
| 1 | 1 | NULL | NULL |
---------------------------
| 2 | NULL | 1 | NULL |
---------------------------
| 3 | 2 | 2 | 1 |
---------------------------
| 4 | NULL | NULL | 2 |
---------------------------
Tabella B
-------------
| ID | DATA |
-------------
| 1 | 123 |
-------------
| 2 | 456 |
-------------
Tabella C
-------------
| ID | DATA |
-------------
| 1 | 789 |
-------------
| 2 | 102 |
-------------
Tabella D
-------------
| ID | DATA |
-------------
| 1 | 654 |
-------------
| 2 | 321 |
-------------
Sto cercando di recuperare un set di risultati che ha aderito i dati dalla tabella B ed i dati dalla tabella C, solo se uno degli ID di cabina non è nullo.
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;
È questo consigliato o dovrei meglio dividere questo in più query?
C'è un modo per fare un join interno tra queste tabelle?
Il risultato mi aspetto è:
-------------------------------------------------
| 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
sono chiavi esterne alle tabelle table_b
, table_c
, table_d
Ho modificato la mia risposta e aggiunto il risultato che mi aspetto. – wiizzard
Non hai mostrato i vincoli FK. Gli FK table_a.id_b e table_a.id_c alle tabelle B e C? (sembra che lo siano, ma questo non è menzionato nella domanda) – wildplasser
Hai ragione. Sono FK. – wiizzard