现在人员表里面的 单位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
因为有的单位名字重复了,会报错:单行子查询返回多行
#3
能不能这样,加入判断,重复的就跳过更新,只更新没有重复单位的数据。
#4
#5
update a
set a.unit_id=(select b.id from b where a.unit_id=b.unit_name)
上面的那个语句不可用,用这个,不用加判断重复的
#6
你就不会先查询出那些重复单位,然后更新时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);
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
因为有的单位名字重复了,会报错:单行子查询返回多行
#3
能不能这样,加入判断,重复的就跳过更新,只更新没有重复单位的数据。
#4
#5
update a
set a.unit_id=(select b.id from b where a.unit_id=b.unit_name)
上面的那个语句不可用,用这个,不用加判断重复的
#6
你就不会先查询出那些重复单位,然后更新时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);
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楼应该是正确的吧,楼主回复一下结果,让我们参考学习一下。