我是用Access试验的,首先将表II的数据按name汇总成表III,其中的内容为
name number
b    3
d    7然后通过下面的sql能得到你想要的结果:
SELECT I.name,I.number-iif(isnull(III.number),0,III.number) from I left join III on I.name=III.name不知有没有更好的办法:)

解决方案 »

  1.   

    我想问一句,你用的是什么数据库开发工具,比如VB,DELPHI什么的?
      

  2.   

       感谢各位的回复!!
       以上的信息不全:本人用的是vb6。
       感谢TopHead,gx_sunny,以及一切光顾/关照本问题的“仙人”。
      

  3.   

    update I set number=number-(select sum(number) from II where II.name=I.name)
    这是个错误的语句,但就是这个意思;用循环去做吧
      

  4.   

    如果II表的数据量小用sSam的方法好,因为他会使用多次子查询如果II表的数据量大用下面的语句将使用一次子查询和一次连接update I set I.number=I.number - temp.number
       from I,(select name,sum(number) as number
                      from II
                      group by name
              ) as temp
       where I.name=temp.name
      

  5.   

    利用中间表(group by II表)
      

  6.   

    如果数据量较大:(在SQL Server中)
    select name, sum(number)
    into #tmp
    from I
    group by nameunion all
    select name, -sum(number)
    from II
    group by nameselect name, sum(number)
    from III
    group by namedelete Iinsert I
    select * 
    from #tmp这种方法的速度要快于连接后,作update
      

  7.   

       假设表1名为Table1, 表2名为table2 我们通常在SQL Server或Oracle这样写:
        select name, sum(number) number
        from (
        select name, number number
        from table1
        union all
        select name, - sum(number) number
        from table2
        group by name
        ) order by 1
      

  8.   

    create view view2 as
     select distinct name,sum(number) number from table2;
    create view result as
       select name,a1.number-a2.number
         from table1 a1,view2 a2
       where a1.name(+)=a2.namethis is for oracle
    i want it have som help for u
    !
      

  9.   

    ycdch 的写法对吗,我看,不见得
    还是采用TANGHUAN的办法吧
      

  10.   

    Update I SET Number = (SELECT NVL(SUM(II.Number),0) FROM II 
    WHERE I.Name = II.Name);