您好我在两张桌子上进行左连接。如果特定列为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
运行包含用户名的子查询,并在{{1}上匹配}。
我以为我可以做类似的事情:
A.USER_ID
但是我收到了这个错误:
CASE B.PREFERRED_NAME
WHEN NULL THEN subquery here
可能是因为该列不允许使用NULL。
解决 谢谢您的帮助。这就是我解决问题的方法:
ERROR [42703] [IBM][DB2] SQL0206N "NULL" is not valid in the context where it is used.
答案 0 :(得分:1)
根据您的查询,您可以将第三个表格添加为另一个LEFT JOIN
,然后将您想要的列添加到COALESCE
函数中:
此外,如果没有首选名称,您可能会将首选名称存储为空格,在这种情况下,您可以使用NULLIF
函数将其转换为{{1} },适用于您的NULL
。
这是我的意思的一个例子:
COALESCE
如果您知道SELECT
A.ACCOUNT_NUM
,A.USER_ID
,COALESCE(
NULLIF(B.PREFERRED_NAME,'')
,B.FIRST_NAME
,C.OTHER_NAME
) || ' ' || B.LAST_NAME AS NAME
FROM TABLE_A A
LEFT JOIN TABLE_C C
ON C.USER_ID = A.USER_ID
LEFT JOIN TABLE_B B
ON A.USER_ID = B.USER_ID
中的C
符合A
,那么您可以将其转换为常规(内部)JOIN
。
您收到错误的原因是因为您无法在NULL
声明中使用CASE
。如果您想要NULL
案例,那么您必须像@Abecee在CASE WHEN B.PREFERRED_NAME IS NULL THEN ...