2009-12-04 79 views
2

我想在MySQL的轉換是爲我們:有內轉換UPDATE從SQL JOIN使用MySQL中

UPDATE product 
SET price = 12.95 
FROM product 
    INNER JOIN product_to_category ON product.product_id = product_to_category.product_id 
    INNER JOIN category ON product_to_category.category_id = category.category_id 
     AND category.parent_id = 39 

MySQL不喜歡FROM部分,我不知道的是, INNER JOINs將以書面形式工作。

回答

9
UPDATE product 
SET price = 12.95 
WHERE product_id in 
(SELECT product_id 
FROM product_to_category 
INNER JOIN category 
ON product_to_category.category_id = category.category_id 
WHERE category.parent_id = 39) 
+2

+1:如有疑問,子查詢 – 2009-12-04 21:34:56

+0

MySQL仍然不喜歡'FROM product'行 – Jeff 2009-12-04 21:36:05

+0

@Deca:提供的查詢中沒有'FROM PRODUCT'。 – 2009-12-04 21:41:51

2

我沒有你的數據庫,所以我真的不能測試,但我想你可以使用multi-table syntax爲您更新語句:

UPDATE [LOW_PRIORITY] [IGNORE] table_references 
    SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... 
    [WHERE where_condition] 

引述手冊:

對於多表語法,UPDATE 更新了 中指定的每個表中的行,該表滿足 條件。

在你的情況,這樣的事情可能做的伎倆:

UPDATE product, product_to_category, category 
SET product.price = 12.95 
WHERE product.product_id = product_to_category.product_id 
    AND product_to_category.category_id = category.category_id 
    AND category.parent_id = 39 

希望這有助於!

+0

我其實只需要更新一個表 - 產品 - 但是基於其他兩個表的標準。我會嘗試一個這個變種,看起來像是在正確的方向。謝謝。 – Jeff 2009-12-04 21:42:46

2

對多表UPDATE語句一般語法

UPDATE <table> 
    (INNER|LEFT|RIGHT|...) JOIN <table2> ON <condition> 
SET <field>=<value> 
WHERE <condition> 

所以,如果你把它改寫爲

UPDATE product 
    INNER JOIN product_to_category ON product.product_id = product_to_category.product_id 
    INNER JOIN category ON product_to_category.category_id = category.category_id AND category.parent_id = 39 
SET price = 12.95 

(未經測試,我沒有一個MySQL實例你的發言應該工作)

0
UPDATE product 
    INNER JOIN product_to_category ON product.product_id = product_to_category.product_id 
    INNER JOIN category ON product_to_category.category_id = category.category_id 
     AND category.parent_id = 39 
SET product.price = 12.95