Oracle 数据库 查询某一个值为null执行其他sql 或使用其他字段代替

今天有一个需求是从库里查询出一个值,如果有则使用,如果为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';

特此记录

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值