sql语句 根据条件update

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql语句 根据条件update相关的知识,希望对你有一定的参考价值。

表A和表B都有ID和DIV两个字段
现在表A有两条数据:
ID DIV
00 0
01 1

表B的数据:
NUM ID DIV
0001 01 NULL
0002 01 NULL
0003 01 0
0004 02 NULL
0005 02 1

现在要把表B里面DIV为NULL的数据用表A的DIV更新掉
更新的条件是如果表B的ID在表A存在,那么就用表A相同ID的DIV来更新
如果表B的ID在表A不存在,则用表A里面ID为00的DIV来更新
请问 SQL语句怎么实现?谢谢了^_^~

参考技术A update B
set B.div = (case
when B.id in (select distinct id from A) then (select div from A where id = B.id)
else (select div from A where id='00') end
)
from A,B
where B.div is null本回答被提问者采纳
参考技术B 先运行
update B set div = a. a2
from
(
select ID as a1
,DIV as a2
from A
) as a
where div is null
and ID = a.a1

再运行
update B set div = a. a2
from
(
select ID as a1
,DIV as a2
from A
where ID = 00
) as a
where div is null追问

感谢回答,第一段SQL语句是把ID相同的先更新掉,第二段是把ID不同的固定用00的DIV来更新。
能不能用一段SQL语句来做呢?

追答

2个语句可以放在一起运行的,先后顺序不要搞反

参考技术C update b
set b.div = (case
when b.id in (select distinct div from a) then a.div
when b.id not in (select distinct div from a) then '00'
)
from a,b
where b.div is null追问

感谢回答,你可能理解错了我的意思。
当B表的ID在A表里不存在时,是用A表里面ID为00的DIV更新,而不是用“00”来更新。
不过还是很感谢。

以上是关于sql语句 根据条件update的主要内容,如果未能解决你的问题,请参考以下文章

如何根据不同的条件执行不同的SQL语句

SQL根据条件执行不同的语句

sql 存储过程 - 根据条件执行不同的SQL语句

根据相同的条件语句选择两列SQL

根据表数据有条件地执行 SQL 查询/语句

sql语句 根据条件update