当一或多个列为空时,我试图从表中获取用户
我的意思是,像这样的东西
SELECT ID_USER,
CASE
WHEN NAME IS NULL
THEN 'HAS NO NAME'
WHEN SECON_NAME IS NULL
THEN 'HAS NO SECOND'
WHEN USER_NUM IS NULL
THEN 'HAS NO NUM'
END AS STATUS
FROM USER
这可能吗?还是有另一种方式来获得它?
到目前为止,我只能获得second_name列
这样的事情?
SQL> with users (id, name, second_name, user_num) as
2 (select 1, 'Little', 'Foot', '100' from dual union all -- has all
3 select 2, 'Scott' , null , '200' from dual union all -- no second
4 select 3, null , 'Mike', '300' from dual union all -- no first
5 select 4, null , null , '400' from dual -- no first, no second
6 )
7 select id,
8 trim(both '-' from
9 decode(name, null, 'No first') ||'-'||
10 decode(second_name, null, 'No second') || '-'||
11 decode(user_num, null, 'No num')) msg
12 from users;
ID MSG
---------- -------------------------
1
2 No second
3 No first
4 No first-No second
SQL>
CASE表达式在第一个计算为TRUE的表达式之后退出。因此,即使您有多个条件,您也只会得到其中之一。
为了获得具有NULL名,NULL第二名或NULL num的用户,您可以运行以下查询:
SELECT ID_USER
FROM USER
WHERE
NAME IS NULL
OR SECON_NAME IS NULL
OR USER_NUM IS NULL
如果您想知道为什么会退货,可以使用
SELECT ID_USER,
CASE WHEN NAME IS NULL THEN 'HAS NO NAME ' else '' end
+ CASE WHEN SECON_NAME IS NULL THEN 'HAS NO SECOND ' else '' end
+ CASE WHEN USER_NUM IS NULL THEN 'HAS NO NUM' else '' end
STATUS
FROM USER
WHERE
NAME IS NULL
OR SECON_NAME IS NULL
OR USER_NUM IS NULL