2011-11-16 5 views
3

Я знаю, что это просто, но у меня есть ментальный блок.mysql update with join

Мне нужно обновить все товары, принадлежащие к категории. Продукт присваивается категории в таблице ассоциаций.

так что это что-то вроде

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'