update jyb_pl a set gzdwid=(select b.zzjgid from zzjg_pl_temp b where a.gzdwmc=b.zzjgmc)
       where exists(select * from zzjg_pl_temp b where a.gzdwmc=b.zzjgmc)出现‘单行子查询返回多行,如何修改呢

解决方案 »

  1.   

    select b.zzjgid from zzjg_pl_temp b where a.gzdwmc=b.zzjgmc这句返回的值超过一个了。
    可以用distinct b.zzjgid 或max(b.zzjgid )。总之要是使获得值只有一个
      

  2.   

    你的表jyb_pl 与表zzjg_pl_temp之间以P字段gzdwmc\zzjgmc关联是一对多的关系,所以报这种错误.这个就看你的业务要求了,并不是语句如何写的问题.
      

  3.   

    能写个语句和我这大体处理相同问题的吗?你说的这些我都知道。我只是不太清楚ORACLE的语法,SQL SERVER这根本就不是个问题了。
      

  4.   


    一对多,改为多对一或者一对一,不然返回多个值你做个规则,应该去选哪个值,比如楼上说的max.  在SQL SERVER也是一样的.要么就是你的业务设计不太恰当.
      

  5.   


    sqlserver对于多对多的update, 默认取第一条.
      

  6.   

    试试:update jyb_pl a set gzdwid=(select b.zzjgid from zzjg_pl_temp b where a.gzdwmc=b.zzjgmc and rownum = 1) 
          where exists(select * from zzjg_pl_temp b where a.gzdwmc=b.zzjgmc)