I got a PostgreSQL database with 4 tables:
Table a
--------------------------- | ID | B_ID | C_ID | D_ID | --------------------------- | 1 | 1 | NULL | NULL | --------------------------- | 2 | NULL | 1 | NULL | --------------------------- | 3 | 2 | 2 | 1 | --------------------------- | 4 | NULL | NULL | 2 | ---------------------------
Table B
------------- | ID | DATA | ------------- | 1 | 123 | ------------- | 2 | 456 | -------------
Table C
------------- | ID | DATA | ------------- | 1 | 789 | ------------- | 2 | 102 | -------------
Table D
------------- | ID | DATA | ------------- | 1 | 654 | ------------- | 2 | 321 | -------------
I am trying to get a result set that appended data from table B and data from table C only if one of the IDs of the stands is not 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;
Is this recommended, or am I better off splitting it into multiple requests?
Is there a way to make an inner join between these tables?
Expected Result:
------------------------------------------------- | 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 are foreign keys for tables table_b , table_c , table_d