我对此不知所措。实现这一目标的简单方法是什么?
我有这样的“客户”表:
USER_ID| NAME | J_ID |K_ID |Y_ID
-----------------------------------------
1 | CUST1 | A | 1 | AB
2 | CUST2 | B | 2 | NULL
3 | CUST3 | C | 3 | EF
4 | CUST4 | NULL | NULL | GH
5 | CUST5 | E | 5 | IJ
Run Code Online (Sandbox Code Playgroud)
然后像这样的“R_ID”表:
R_ID | Y_ID
------------------
1A9 | AB
2B8 | CD
3C7 | EF
4D6 | GH
5E5 | IJ
Run Code Online (Sandbox Code Playgroud)
然后像这样的“JK_ID”表:
R_ID | J_ID | K_ID
-----------------------
1A9 | A | 1
2B8 | B | 2
3C7 | C | 3
4D6 | D | 4
5E5 | E | 5
Run Code Online (Sandbox Code Playgroud)
这就是我想得到的:
USER_ID| NAME | J_ID |K_ID |Y_ID
-----------------------------------------
1 | CUST1 | A | 1 | AB
2 | CUST2 | B | 2 | CD
3 | CUST3 | C | 3 | EF
4 | CUST4 | D | 4 | GH
5 | CUST5 | E | 5 | IJ
Run Code Online (Sandbox Code Playgroud)
所以我需要通过加入 R_ID 或 JK_ID 表来获取缺失值。但是获得该结果的最简单方法是什么,以便将空值替换为连接表中的值?
实现此目的的一种方法是将LEFT OUTER JOIN与COALESCE一起使用。要获取J_ID
andK_ID
列中的缺失值,您可以加入R_ID
and JK_ID
。要获取Y_ID
列中的缺失值,您可以加入JK_ID
和R_ID
。
接近以下内容的东西应该可以工作:
SELECT
cus.USER_ID
, cus.NAME
, COALESCE(cus.J_ID, r_to_jk.J_ID) AS J_ID
, COALESCE(cus.K_ID, r_to_jk.K_ID) AS K_ID
, COALESCE(cus.Y_ID, r_to_y.Y_ID) AS J_ID
FROM Customers cus
LEFT OUTER JOIN R_ID y_to_r ON cus.Y_ID = y_to_r.Y_ID
LEFT OUTER JOIN JK_ID r_to_jk ON y_to_r.R_ID = r_to_jk.R_ID
LEFT OUTER JOIN JK_ID jk_to_r ON cus.J_ID = jk_to_r.J_ID AND cus.K_ID = jk_to_r.K_ID
LEFT OUTER JOIN R_ID r_to_y ON jk_to_r.R_ID = r_to_y.R_ID;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
370 次 |
最近记录: |