【发布时间】:2015-08-21 21:49:31
【问题描述】:
您好,我正在对两个表执行左连接。如果特定列为 NULL,我想运行子查询以从完全不同的表中获取值。这是我现在拥有的:
SELECT A.ACCOUNT_NUM, A.USER_ID,
CASE B.PREFERRED_NAME
WHEN '' THEN RTRIM(B.FIRST_NAME) || ' ' || B.LAST_NAME
ELSE RTRIM(B.PREFERRED_NAME) || ' ' || B.LAST_NAME
END AS NAME
FROM TABLE_A A
LEFT JOIN TABLE_B B
ON A.USER_ID = B.USER_ID
TABLE_B 有时不包含与TABLE_A 匹配的记录,因此我想从TABLE_C 运行一个包含用户名并将匹配A.USER_ID 的子查询。
我想我可以这样做:
CASE B.PREFERRED_NAME
WHEN NULL THEN subquery here
但我收到此错误:
ERROR [42703] [IBM][DB2] SQL0206N "NULL" is not valid in the context where it is used.
可能是因为该列不允许使用 NULL。
已解决 谢谢您的帮助。这就是我解决问题的方法:
SELECT A.ACCOUNT_NUM, A.USER_ID,
CASE
WHEN B.PREFERRED_NAME IS NULL THEN C.USER_ID
WHEN B.PREFERRED_NAME IS NOT NULL THEN
CASE PREFERRED_NAME
WHEN '' THEN RTRIM(B.FIRST_NAME) || ' ' || B.LAST_NAME
ELSE RTRIM(B.PREFERRED_NAME) || ' ' || B.LAST_NAME
END
END AS NAME
FROM TABLE_A A
LEFT JOIN TABLE_B B
ON A.USER_ID = B.USER_ID
JOIN TABLE_C C
ON A.USER_ID = C.USER_ID
【问题讨论】:
-
不确定 DB2 的细节。你试过像
CASE WHEN B.PREFERRED_NAME = '' THEN ... WHEN B.PREFERRED_NAME IS NULL THEN ...这样重写吗?但是,“[...] 因为该列不允许 NULL”到底是什么意思。