下面这个SQL语句:
update part1 a set (a.dose,a.totaldose)=
(select b.dose,b.totaldose from part2 b where a.partno=b.partno)
where exists(select b.partno from part2 b where a.partno=b.partno)为什么一定加上exists这部分才好用呢?
什么情况下可以不加上exists的部分?什么情况下一定要加exists部分?
请大家发言。。!!!
update part1 a set (a.dose,a.totaldose)=
(select b.dose,b.totaldose from part2 b where a.partno=b.partno)
where exists(select b.partno from part2 b where a.partno=b.partno)为什么一定加上exists这部分才好用呢?
什么情况下可以不加上exists的部分?什么情况下一定要加exists部分?
请大家发言。。!!!
(select b.dose,b.totaldose from part2 b where a.partno=b.partno)
where exists(select b.partno from part2 b where a.partno=b.partno) 等于update part1 a set (a.dose,a.totaldose)=
(select b.dose,b.totaldose from part2 b where a.partno=b.partno)
where a.partno in (select b.partno from part2 b) 不过第一句效率会高些还可稍稍优化update part1 a set (a.dose,a.totaldose)=
(select b.dose,b.totaldose from part2 b where a.partno=b.partno)
where exists(select 'X' from part2 b where a.partno=b.partno)
已经包括了,为什么要一定要写呢????
(select b.dose,b.totaldose from part2 b where a.partno=b.partno)
where exists(select b.partno from part2 b where a.partno=b.partno) 如果不加where条件:
update part1 a set (a.dose,a.totaldose)=
(select b.dose,b.totaldose from part2 b where a.partno=b.partno)
意思是:
把part1表的所有记录的a.dose,a.totaldose两个字段更新为表part2的b.dose,b.totaldose字段内容;条件是a.partno=b.partno,当不存在满足此条件的记录时,查询出来的b.dose,b.totaldose两个字段当然为null。所以part1表的a.dose,a.totaldose两个字段自然被update为null了。加上where条件以后,就限定了,只更新part1表中符合exists(select b.partno from part2 b where a.partno=b.partno)的记录。
自然不会把所有记录都update为null。