一个奇怪的问题sql2个表 man(客人表 主表) ,account(帐务表  从表)
man 表结构 (id,acc 都有索引)id  acc name  payje (主键,帐号,姓名,消费消费合计)1   001  张三  200(需要sql 求出来)account 表结构(id,idd, acc 都有索引)id idd  acc  je  (主键 ,man表的主键 帐号 ,金额明细)
1  1    001   20
2  1    001   80
执行下面的语法update man set man.payje = (select sum(account.je) from account 
where account.acc = man.acc and account.idd = man.id and man.id = '1' )当acc 表记录有5万条时候(001 的帐务只有2条的) ,执行这个语法需要10多分
中 ,整个过程都在等待,   请问这个语法有问题吗?

解决方案 »

  1.   

    update a set a.payje = b.sje
    from man as a inner Join (Select acc,sum(je) as sje
        from account where idd='1' group by acc) as b
     on a.acc=b.acc and a.id='1'
      

  2.   

    用户表建索引了么?
    update man set man.payje = (select sum(account.je) from account
    where account.acc = man.acc and account.idd = man.id and man.id = '1' )
    这里条件 account.acc = man.acc 是多余条件
    修改成这个就应该快了
    update man set man.payje = sum(account.je) from account,man
    where account.idd = man.id and man.id = '1' 
      

  3.   

    你那个慢是因为条件不对
    即使man.id <> '1'的也会执行(即使数据没有修改)
      

  4.   

    你的执行完结果应该是
    =1的正确,其他的数据都应该是null
      

  5.   

    update man set man.payje = sum(account.je) from account,man
    where account.idd = man.id and man.id = '1' 语法通不过,提示 
    服务器: 消息 157,级别 15,状态 1,行 1
    聚合不应出现在 UPDATE 语句的集合列表中。
    WangZWang(先来) ( ) 
    的回答正确
      

  6.   

    马虎了sum是聚合函数,呵呵,需要group by的WangZWang(先来)的可以,你原来的是进行了所有数据修改,所以才慢,如果真正执行完毕
    就是=1的正确,其他的数据都应该是null
      

  7.   

    to sp4(1)多谢。我再看看需要group by的
     能否写一下呢,不好意思,菜鸟啊