带连接的mysql更新

时间:2011-11-16 21:29:15

标签: mysql sql

我知道这很简单,但我有精神障碍。

我需要更新属于某个类别的所有产品。产品将分配到关联表中的类别。

所以它就像

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

有更好的方法吗?

2 个答案:

答案 0 :(得分:4)

JOIN通常会有最佳执行计划,但IN可能效率低下:

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

答案 1 :(得分:0)

另一种写作方式是:

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