批量更新表数据

时间:2021-12-13 14:51:26
两张oracle的数据表,一张是人员表(要更新的表A),另一张是单位表(参考表B)。

现在人员表里面的 单位id(unit_id)字段的内容是单位表里面的 单位名称(name)字段,要把人员表的 单位id(unit_id)字段内容更新成对应单位表的 id

其中一个单位对应多个人员, 单位名称有重复,id唯一。(单位名称重复可以选择第一个)

请问各位前辈sql应该怎么写?

9 个解决方案

#1


update a 
set a.unit_id=(select b.id from b where  a.unit_id=b.unit_name)
where exists (select * from b where a.unit_id=b.unit_name);

#2


引用 1 楼 junes06 的回复:
update a 
set a.unit_id=(select b.id from b where  a.unit_id=b.unit_name)
where exists (select * from b where a.unit_id=b.unit_name);


因为有的单位名字重复了,会报错:单行子查询返回多行

#3


能不能这样,加入判断,重复的就跳过更新,只更新没有重复单位的数据。

#4


批量更新表数据

#5


update a 
set a.unit_id=(select b.id from b where  a.unit_id=b.unit_name)


上面的那个语句不可用,用这个,不用加判断重复的

#6


引用 3 楼 JiaXinPeng 的回复:
能不能这样,加入判断,重复的就跳过更新,只更新没有重复单位的数据。


你就不会先查询出那些重复单位,然后更新时and not exits哪些单位啊

#7


update a 
set a.unit_id=(select b.id from b where  a.unit_id=b.unit_name  and rownum=1)
where exists (select * from b where a.unit_id=b.unit_name);

#8


加个group by 不就行了。。。。

#9


5楼应该是正确的吧,楼主回复一下结果,让我们参考学习一下。

#1


update a 
set a.unit_id=(select b.id from b where  a.unit_id=b.unit_name)
where exists (select * from b where a.unit_id=b.unit_name);

#2


引用 1 楼 junes06 的回复:
update a 
set a.unit_id=(select b.id from b where  a.unit_id=b.unit_name)
where exists (select * from b where a.unit_id=b.unit_name);


因为有的单位名字重复了,会报错:单行子查询返回多行

#3


能不能这样,加入判断,重复的就跳过更新,只更新没有重复单位的数据。

#4


批量更新表数据

#5


update a 
set a.unit_id=(select b.id from b where  a.unit_id=b.unit_name)


上面的那个语句不可用,用这个,不用加判断重复的

#6


引用 3 楼 JiaXinPeng 的回复:
能不能这样,加入判断,重复的就跳过更新,只更新没有重复单位的数据。


你就不会先查询出那些重复单位,然后更新时and not exits哪些单位啊

#7


update a 
set a.unit_id=(select b.id from b where  a.unit_id=b.unit_name  and rownum=1)
where exists (select * from b where a.unit_id=b.unit_name);

#8


加个group by 不就行了。。。。

#9


5楼应该是正确的吧,楼主回复一下结果,让我们参考学习一下。