代码之家  ›  专栏  ›  技术社区  ›  Jader Dias

如何在第二个表中使用select group by更新一个表,并将其本身作为mysql中的数据源?

  •  1
  • Jader Dias  · 技术社区  · 16 年前

    我可以这样做:

    SELECT t2.value + sum(t3.value)
    FROM tableA t2, tableB t3
    WHERE t2.somekey = t3.somekey
    GROUP BY t3.somekey
    

    但是怎么做呢?

     UPDATE tableA t1
        SET speed = (
            SELECT t2.value + sum(t3.value)
            FROM tableA t2, tableB t3
            WHERE t2.somekey = t3.somekey
            AND t1.somekey = t3.somekey
            GROUP BY t3.somekey
       )
    ;
    

    MySQL说这是非法的,因为你不能指定目标表 t1 用于FROM子句中的更新。

    2 回复  |  直到 14 年前
        1
  •  8
  •   Jader Dias    16 年前

    您可以通过重写查询来完成此操作:

    UPDATE tableA t1, (
       SELECT somekey, SUM(value) value
       FROM tableB t3
       GROUP BY somekey
    ) t2
    SET speed = t1.value + t2.value
    WHERE t1.somekey = t2.somekey;
    
        2
  •  -1
  •   Quassnoi    16 年前

    您正在使用 MySQL 的扩展名 GROUP BY 在此上下文中不应使用。

    给定以下值:

    tableA
    
    value somekey
    1     1
    2     1
    
    tableB
    
    value somekey
    3     1
    4     1
    

    此子查询:

        SELECT  t2.value + SUM(t3.value)
        FROM    tableA t2, tableB t3
        WHERE   t2.somekey = t3.somekey
                AND t1.somekey = t3.somekey
        GROUP BY
                t3.somekey
    

    也会还给你的 8 9 :它将计算 SUM(b.value) = 7 然后添加 随机的 值来自 A 对于给定的键。

    对于此示例数据,您希望将速度更新为哪个值?

    推荐文章