2008-10-14 85 views
1

我試過了幾種方法來從另一個表更新mySQL數據庫表中的列,但沒有任何運氣。從另一個表更新列 - mySQL 3.5.2

我在某處讀到版本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 
+0

順便說一句,你確定你的版本正確嗎? – Node 2008-10-14 09:08:38

回答

2

當我用於使用不支持子查詢或多表更新的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; 

順便說一下,據我所知,沒有這樣的MySQL 3.5.x版本。我想你可能報告錯了。否則你正在使用另一種產品,如mSQL。

編輯:我忘了在上面的查詢生成的SQL語句中添加一個分號。

0

多表更新不會在MySQL <支持= 4.0.4 我會極力推薦給您的服務器更新到MySQL 5.0.xx