2011-11-16 54 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'