数据库为mysql。
我有一张表AAA。执行如下SQLSELECT type, sum(
    CASE 
        WHEN date >= 1322820671621 THEN 50 
WHEN date >= 1322388671621 AND date < 1322820671621 THEN 20
WHEN date >= 1320403931304 AND date < 1322388671621 THEN 10
    END) AS number FROM AAA WHERE date >= 1320403931304
GROUP BY type得到如下结果
type number
18    300
26    270另:还有另一张表BBB。里面包含了type和number字段。我想把type=18的记录的number设成300,type=26的记录的number设成270.
目前我是先执行SELECT语句,根据select结果执行多次update语句来实现。
问:
能否用一句SQL语句,此语句包含了上面的SELECT语句,来实现这个功能?这个效率是否会比我现在的方式高?

解决方案 »

  1.   

    update bbb a inner join 
    (SELECT type, sum(
        CASE 
            WHEN date >= 1322820671621 THEN 50 
        WHEN date >= 1322388671621 AND date < 1322820671621 THEN 20
        WHEN date >= 1320403931304 AND date < 1322388671621 THEN 10
        END) AS number FROM AAA WHERE date >= 1320403931304
    GROUP BY type
    ) b
    on a.type=b.type 
    set a.number=b.number
      

  2.   

    好像悲剧了,这个语句在SQLite中不能使用。。
      

  3.   

    1、确定是什么数据库;
    2、在SQLITE中,将分组的语句生成物理表再替换
      

  4.   

    嗯,在SQLite和MYSQL中都需在用到这个功能。
    不好意思,没有讲清楚。。我以为在SQLitet Mysql中都语句都一样的。
      

  5.   

    SQLITE中比较麻烦,很多函数不能使用。 
      

  6.   

    那我在SQLite中就分两步来吧。关键的mysql解决。谢谢各位