两个表  一个表是发票信息表 另外一个表是订单物品明细表(一个订单可以对应多张发票) 其中有个字段是发票号exists语句这样  update FPH set State=1 where exists(select * from OrderDetail where OrderNo=**(订单编号))in语句这样      update FPH set State=1 where FPH in(select FPH from OrderDetail where OrderNo=**(订单编号))我觉得这两个语句应该效果是一样 但是用exists会把整个发票信息表都更新掉 用in就只更新跟订单想关联的发票 想了半天没想出答案 求各位高手给小弟解下疑惑

解决方案 »

  1.   

    update FPH set State=1 where exists(select * from OrderDetail where OrderNo=**(订单编号) and OrderDetail.FPH=FPH.FPH) 
      

  2.   

    exists只要满足一条就可,
    exists更新数据需要传个附加列到子查询里去
      

  3.   

    http://blog.csdn.net/Tercel99/archive/2008/03/04/2146767.aspx
    看看吧,不过感觉没有解释你的问题
      

  4.   

    缺少个关联的条件
    update FPH set State=1 where exists
    (select * from OrderDetail where OrderNo=**(订单编号) and OrderDetail.FPH=FPH.FPH)
      

  5.   

    因为楼主EXISTS这句没有关联信息,只要WHERE后面为真就全部被更新了.
      

  6.   

    --这个关联条件不能少
    OrderDetail.FPH=FPH.FPH
      

  7.   

    嘿嘿观察,好象少了点东西exists语句这样  update FPH set State=1 where [某关联字段] exists(select * from OrderDetail where OrderNo=**(订单编号)) in语句这样      update FPH set State=1 where FPH in(select FPH from OrderDetail where OrderNo=**(订单编号)) 看你的关联什么字段了,是不是 FPH 啊?试看
      

  8.   

    update FPH set State=1 where 
    exists
    (select * from OrderDetail  A where OrderNo=**(订单编
    号) and   id = FPH.id
    )
      

  9.   

    exists子查询:只要有任意一条语句即判断条件为真,故会更新整个发票信息表,
    in 子查询:则是外部查询的FPH在字查询中出现的才会被更新掉。
    等价语句参照1楼。