下面这个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部分?
请大家发言。。!!!

解决方案 »

  1.   

    目的是,当A表里存在和B表里相同的PARTNO时,则修改A表记录
      

  2.   

    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) 等于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) 
      

  3.   

    exists条件在 (select   b.dose,b.totaldose   from   part2   b   where   a.partno=b.partno) 
    已经包括了,为什么要一定要写呢????
      

  4.   

    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) 如果不加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。