update qyjejxlsb
   SET (qyjejxlsb_wgslx, qyjejxlsb_jylx, qyjejxlsb_wclx) =
          (SELECT 0,
                  0,
                  0
             FROM cpsyljs WHERE qyjejxlsb_rq = cpsyljs_rq
            );连个表 qyjejxlsb , cpsyljs 
现在的问题是 中间的SELECT语句查出一条语句,而qyjejxlsb又两条数据,这样在更新的时候就会报错,因为在更新其中一条数据的时候,插入的全部都是NULL值。应该怎么修改这个语句,使得更新的语句仅仅是SELECT 语句中用到的日期多查询出的数据 

解决方案 »

  1.   

    参考:两表数据关联的UPDATE表tb1及数据如下:
            ID          A          B
    ---------- ---------- ----------
             1         10         20
             2          1          2
             3          3          2表tb2及数据如下:
            ID          A          B
    ---------- ---------- ----------
             1         10         20
             2         10         20根据表tb2的id更新表tb1对应的a,b的值。update tb1 set (a,b) = (select a,b from tb2 where id = tb1.id) where id in (select distinct id from tb2)        ID          A          B
    ---------- ---------- ----------
             1         10         20
             2         10         20
             3          3          2
    ---------------------------------------------------------------------------------------------------------
    表tb2及数据如下:
            ID          A          B
    ---------- ---------- ----------
             1         10         20
             2         10         20
             3          3          2
             1         20         40
             2         20         40根据ID分组求A,B的和,然后更新表tb1update tb1 set (a,b) = (select sum(a),sum(b) from tb2 where id = tb1.id) where id in (select distinct id from tb2)        ID          A          B
    ---------- ---------- ----------
             1         30         60
             2         30         60
      

  2.   

    感谢楼上的回答,但是效率要稍微低了一点点
    应该在最外层添加
    where exists (select 'x' from cpsyljs WHERE qyjejxlsb_rq = cpsyljs_rq 
    )
      

  3.   

    exists并不是任何时候效率都高,跟你的条件有关