update 多表/case when 条件

update A   j set j.replace_job=(select d.replace_job from B  d where j.job_code = d.code and rownum < 2)
where exists (select 1 from wd_schedule_job d where j.job_code = d.code and rownum <2);

update A  j set j.replace_job=nvl((select d.replace_job from B  d where j.job_code = d.code and rownum <2),j.replace_job);

 

 

 

一旦发现条件为真,CASE语句将返回结果,不再进一步下一个评估条件,走成功一个分支,立马返回。
update A  a  set a.effective_route_id = (select case  when b.real_route_id is not null then b.real_route_id
                                                                               when b.adjust_route_id is not null then b.adjust_route_id
                                                                               when b.route_id is not null then b.route_id
                                                                               else effective_route_id end
                                                                               from B  b  where a.id = b.id),
                            a.effective_route_name = (select case when b.real_route_name is not null then b.real_route_name
                                                                               when b.adjust_route_name is not null then b.adjust_route_name
                                                                               when b.route_name is not null then b.route_name
                                                                               else effective_route_name end
                                                                               from B b  where a.id = b.id);

### MySQL中CASE WHEN条件判断的使用 在MySQL中,`CASE WHEN`语句可以用于执行条件判断,并根据不同的条件返回相应的结果。这种结构类似于编程语言中的`if-else if-else`逻辑。以下是详细的说明和示例。 #### 1. 条件判断的基本语法 `CASE WHEN`支持多个条件判断,每个条件通过`WHEN ... THEN`定义,最后可以通过`ELSE`指定默认值。其基本语法如下: ```sql CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE default_result END ``` 每个`WHEN`后面的条件会被依次评估,一旦某个条件为真,则返回对应的`THEN`结果,并停止后续条件的评估[^1]。 #### 2. 示例:基于字段值的条件判断 以下是一个示例,展示如何根据字段值进行条件判断: ```sql SELECT id, name, CASE WHEN age < 18 THEN 'Minor' WHEN age BETWEEN 18 AND 60 THEN 'Adult' WHEN age > 60 THEN 'Senior' ELSE 'Unknown' END AS age_group FROM users; ``` 在这个查询中: - 如果`age`小于18,则返回`'Minor'`。 - 如果`age`在18到60之间,则返回`'Adult'`。 - 如果`age`大于60,则返回`'Senior'`。 - 如果没有匹配的条件,则返回`'Unknown'`[^3]。 #### 3. 示例:复杂条件下的条件判断 下面的示例展示了如何结合多个字段进行复杂的条件判断: ```sql SELECT id, product_name, CASE WHEN price < 10 THEN 'Cheap' WHEN price >= 10 AND price < 50 THEN 'Affordable' WHEN price >= 50 AND price < 100 THEN 'Expensive' WHEN price >= 100 THEN 'Luxury' ELSE 'Not Available' END AS price_category FROM products; ``` 此查询将产品价格分为四个类别,并对未匹配的记录返回`'Not Available'`[^4]。 #### 4. 示例:更新字段值 `CASE WHEN`也可以用于更新中的字段值。例如,根据用户的活跃状态更新其等级: ```sql UPDATE users SET status = CASE WHEN last_login > DATE_SUB(CURDATE(), INTERVAL 7 DAY) THEN 'Active' WHEN last_login > DATE_SUB(CURDATE(), INTERVAL 30 DAY) THEN 'Inactive' ELSE 'Suspended' END; ``` 这个查询会根据用户最近一次登录的时间来更新他们的状态[^2]。 ### 注意事项 - `CASE WHEN`的条件从上到下依次评估,因此应确保条件的顺序正确。 - 如果所有条件都不满足,且未定义`ELSE`部分,则返回`NULL`[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值