今天有一个需求是从库里查询出一个值,如果有则使用,如果为null 则使用其他表的一个字段的值; 特此记录:
例子:
取出 user1 表 id 为1 的数据,
如果数据 为null
则取出 user2 表 id 为1的数据
方法1:
SELECT
(CASE WHEN name is null THEN name
ELSE (select name from user2 where id = 1) END) AS name
FROM
user1
where id = 1
相当于执行完第一个sql结果为null后重新执行另外一个sql
附上sql语句使用例子
数据库 SEX字段 男存的1,女存的0 这样查询的话自动变成男或女
SELECT
(
CASE
WHEN SEX = 1 THEN
'男'
WHEN SEX = 0 THEN
'女'
ELSE
null
END
) AS SEX
FROM
PAT_INFO
例子1: CASE SCORE WHEN 'A' THEN '优' ELSE '不及格' END
例子2: SELECT
STUDENT_NAME,
(CASE WHEN score < 60 THEN '不及格'
WHEN score >= 60 AND score < 80 THEN '及格'
WHEN score >= 80 THEN '优秀'
ELSE '异常' END) AS REMARK
FROM
TABL
方法2:
SELECT
NVL (
u1.name,
u2.name
) AS name
FROM
user1 u1
LEFT JOIN user2 u2 ON u1 . ID = u2.id
WHERE
u1.id = 1
NVL函数的格式如下:NVL(expr1,expr2)
含义是:如果oracle第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第一个参数本来的值。
PS:
后续使用过程中 NVL 函数 尽量先使用 外连接查出来, 不要在第二个参数中直接查, 会失效
错误案例:
SELECT
NVL (
name,
select name form user where id = 1
)
FROM
user
WHERE
id = '2';
特此记录