代码之家  ›  专栏  ›  技术社区  ›  bitsprint

从另一个表更新列-mysql 3.5.2

  •  1
  • bitsprint  · 技术社区  · 17 年前

    我尝试了几种方法来从另一个表更新MySQL数据库表中的列,但没有任何运气。

    我在某个地方读到版本3.5.2不支持多表更新,我需要一个基于代码的解决方案-对吗?

    如果没有,有人能用SQL为我指明正确的方向吗?

    UPDATE products SET products_ordered = (
        SELECT SUM(products_quantity) 
        FROM orders_products 
        WHERE products_id = products.products_id
    );
    

    或:

    Create temporary table my_temp_table
    as
    SELECT products_id, SUM(products_quantity) as total 
    FROM orders_products 
    GROUP BY products_id 
    
    UPDATE products, my_temp_table
    SET products.products_ordered = my_temp_table.total 
    WHERE products.products_id = my_temp_table.products_id
    
    2 回复  |  直到 15 年前
        1
  •  2
  •   Bill Karwin    17 年前

    当我使用不支持子查询或多表更新的MySQL时,我使用了一个技巧来完成您描述的工作。运行结果本身为SQL语句的查询,然后保存输出并将其作为SQL脚本运行。

    SELECT CONCAT( 
      'UPDATE products SET products_ordered = ', 
       SUM(products_quantity), 
      ' WHERE product_id = ', products_id, ';') AS sql_statement
    FROM orders_products
    GROUP BY products_id;
    

    顺便说一句,据我所知,没有MySQL3.5.x这样的版本。我想你可能报错了。或者您正在使用其他产品,如MSQL。

    编辑: 我忘记在上面查询生成的SQL语句中添加分号。

        2
  •  0
  •   Node    17 年前

    mysql中不支持多表更新<=4.0.4 我强烈建议您将服务器更新为mysql 5.0.xx