★SQL:UPDATE问题,在线等待.......来者有分,顶者有分................
我在同一个表中有层次结构,表结构如下:
假设此表有三条记录,我如何用UPDATE 语句更新第一条记录的SL字段为它的子女的数量之和23。ID    FID       SL(数量)  BS(标示子段:0表示双亲、1子女)
1      0                          0 
2      1          10              1
3      1          13              1

解决方案 »

  1.   

    update tbl set sl=b.sumsl from
    (select fid,sum(sl) as sumsl from tbl where bs=0 group by fid) b
    where a.fid=b.fid
      

  2.   

    sorry:改update tbl set sl=b.sumsl from
    (select fid,sum(sl) as sumsl from tbl where bs=1 group by fid) b
    where a.fid=b.fid
      

  3.   

    update table set sl=(select sum(bs) from table where bs=1) where id=1
      

  4.   

    injazz(人雅的标记--落寞刺客):还是不行,可能我把问题说的不是很清楚。我在同一个表中有层次结构,表结构如下:
    假设此表有三条记录,我如何用UPDATE 语句更新第一条记录的SL字段为它的子女的数量之和23。ID    FID       SL(数量)  BS(标示子段:0表示根节点、1子女)
    1      0                         0 
    2      1          10             1
    3      1          13             1
    4      0          __             0
    5      4          20             1
    6      4          30             1
    7      0          ___            0
    8      7           5             1
    9      7           4             1
    10     7           9             1
    ................
    表中的记录是比较复杂的树型结构,现在把第2、3条记录的数量和23赋值给第1条记录的数量,现在把第5、6条记录的数量和50赋值给第4条记录的数量,现在把第8、9、10条记录的数量和18赋值给第7条记录的数量.........(他们之间都有父子关系)
      

  5.   

    楼主如果是access数据库就不行了;
    上面是T-SQL语法
    Access中不允许用where tableA.fieldA = TableB.fieldA 来做update的连接,这是T-sql的语法,必须把t-sql的语法转成Asni的语法,用 join 来做。对查询结果关联,access必须把查询分成两部分,最后把临时表删:
    -------------------------------------------------------------------------
    select fid,sum(sl) as sumsl from aa into bb where bs=1 group by fid;update aa inner join  bb
    on aa.id=bb.fid
    set aa.sl=bb.sumsldrop table bb
    --------------------------------------------------------------------------
      

  6.   

    select fid,sum(sl) as sumsl from aa into bb where bs=1 group by fid;
    ------------>
    select fid,sum(sl) as sumsl into bb from aa where bs=1 group by fid;
      

  7.   

    我顶!!!实在不知道了再加我QQ:18902983注明delphi
      

  8.   

    update tgclqd set zhhj=b.sun_zhhj from (select fid,sum(zhhj) as sun_zhhj from tgclqd where zmlb='4' group by fid) b where a.id=b.fid
    我的语法有什么错误?
      

  9.   

    jinjazz(人雅的标记--落寞刺客) ( ) 信誉:103 
    谢了,我用的是access数据库,在试一下。
      

  10.   

    问题解决了,向jinjazz(人雅的标记--落寞刺客)致谢,结贴。
    楼主如果是access数据库就不行了;
    上面是T-SQL语法
    Access中不允许用where tableA.fieldA = TableB.fieldA 来做update的连接,这是T-sql的语法,必须把t-sql的语法转成Asni的语法,用 join 来做。对查询结果关联,access必须把查询分成两部分,最后把临时表删:
    -------------------------------------------------------------------------
    select fid,sum(sl) as sumsl from aa into bb where bs=1 group by fid;update aa inner join  bb
    on aa.id=bb.fid
    set aa.sl=bb.sumsldrop table bb
    --------------------------------------------------------------------------