wii*_*ard 7 sql postgresql select join
我有一个包含4个表的PostgreSQL数据库:
表A.
---------------------------
| ID | B_ID | C_ID | D_ID |
---------------------------
| 1 | 1 | NULL | NULL |
---------------------------
| 2 | NULL | 1 | NULL |
---------------------------
| 3 | 2 | 2 | 1 |
---------------------------
| 4 | NULL | NULL | 2 |
---------------------------
Run Code Online (Sandbox Code Playgroud)
表B.
-------------
| ID | DATA |
-------------
| 1 | 123 |
-------------
| 2 | 456 |
-------------
Run Code Online (Sandbox Code Playgroud)
表C.
-------------
| ID | DATA |
-------------
| 1 | 789 |
-------------
| 2 | 102 |
-------------
Run Code Online (Sandbox Code Playgroud)
表D.
-------------
| ID | DATA |
-------------
| 1 | 654 |
-------------
| 2 | 321 |
-------------
Run Code Online (Sandbox Code Playgroud)
我正在尝试检索已加入表B中的数据和表C中的数据的结果集,但前提是其中一个booth ID不为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;
Run Code Online (Sandbox Code Playgroud)
这是推荐还是我应该在多个查询中更好地拆分它?
有没有办法在这些表之间进行内部联接?
我期望的结果是:
-------------------------------------------------
| 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 |
-------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
编辑: ID_B
,ID_C
,ID_D
有外键的表table_b
,table_c
,table_d
该WHERE "Table_A"."ID_B" IS NOT NULL OR "Table_A"."ID_C" IS NOT NULL;
可通过B和C表上的相应条款取代:WHERE "Table_B"."ID" IS NOT NULL OR "Table_C"."ID" IS NOT NULL;
.如果table_a.id_b和table_a.id_c不是B和C表的FK,这也可以工作.否则,具有{5,5,5,5}的table_a行将从B和C表中检索两个NULL行.
SELECT ta."ID" AS a_id
, ta."ID_B" AS b_id
, ta."ID_C" AS c_id
, ta."ID_D" AS d_id
, tb."DATA" AS bdata
, tc."DATA" AS cdata
FROM "Table_a" ta
LEFT JOIN "Table_B" tb on ta."ID_B" = tb."ID"
LEFT JOIN "Table_C" tc on ta."ID_C" = tc."ID"
WHERE tb."ID" IS NOT NULL OR tc."ID" IS NOT NULL
;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12207 次 |
最近记录: |