MySQL使用JOIN进行UPDATE操作

4

我知道这很简单,但我脑子一片空白。

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

所以大致上应该是这样的:

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

有更好的方法吗?
2个回答

4

JOIN通常具有最佳的执行计划,但IN可能效率较低:

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

谢谢,这就是我想要的,更新中的连接语法使我感到困惑。 - sdfor

0

另一种写法是:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接