2011-11-16 58 views
3

我知道這很簡單,但我有一個心理障礙。mysql更新加入

我需要更新屬於某個類別的所有產品。該產品被分配到關聯表中的類別。

所以它有類似

UPDATE product P1 
SET myflag = 1 
WHERE P1.productid IN (
    SELECT CA.productid 
    FROM category_associations CA 
    WHERE CA.categoryid = '500' 
) 

是一個更好的辦法?

回答

4

一個JOIN將通常具有最優的執行計劃,但IN可能是低效的:

UPDATE 
    product P1 JOIN 
    category_associations ca 
     ON ca.productId = P1.productId 
     AND ca.categoryId = '500' 
SET P1.myflag = 1 
+0

謝謝,這是我想要的東西,聯接語法在更新暗示我。 – sdfor

0

另一種方式把它寫的是:

UPDATE product 
SET myflag = 1 
FROM product P1 JOIN 
    category_associations ca 
     ON ca.productId = P1.productId 
WHERE ca.categoryId = '500'