SQL如何通过INNER JOIN更新 -

时间:2016-09-08 12:18:33

标签: mysql sql join sql-update alias

请帮我解决这个问题,因为我尝试了这个论坛的所有内容,但仍未找到解决方案。

好吧,我有两张桌子:

  • 价格
  • 制造商

我想更改表格价格中两个字段的值。 我会给那些具体的价值观。

字段是:

  • prices.override(我想在其中给出值0)和
  • prices.product_discount_id(我想在其中给出值66)

但我想更改ID为31的制造商的字段。

所以,我首先检查INNER JOIN是否正常工作。

SELECT manufacturers.manufacturer_id,
prices.product_id,
prices.product_price,
prices.override,
prices.product_discount_id
FROM manufacturers
INNER prices
ON manufacturers.product_id=prices.product_id
AND manufacturers.manufacturer_id=31;

但是当我尝试更新这两个字段时,我不知道如何使其工作。 例如,我试过这个,但它没有工作:

UPDATE prices
SET prices.override=1
FROM
INNER JOIN prices
ON manufacturers.product_id=prices.product_id
AND manufacturers.manufacturer_id=31;

我也试过这个:

UPDATE prices
SET prices.override=1, 
INNER JOIN manufacturers 
ON prices.virtuemart_product_id = manufacturers.virtuemart_product_id 
AND manufacturers.manufacturer_id=31;

我做错了什么?通常我得到的错误信息是:

  

#1064 - 您的SQL语法出错;查看与您的MySQL服务器版本相对应的手册,以便在#JO; FROM jos_virtuemart_product_prices价格附近使用正确的语法INNER JOIN jos_virtuemart_product_man'在第3行

我读了一些别名,但仍然没有结果。

任何帮助将不胜感激!

5 个答案:

答案 0 :(得分:3)

您有一些语法问题,MySQL UPDATE..JOIN语法是:

UPDATE T
JOIN t2 ON()
SET ..
WHERE ..

其次,您在SET prices.override=1之后有一个不必要的逗号,所以:

UPDATE prices
INNER JOIN manufacturers 
ON prices.virtuemart_product_id = manufacturers.virtuemart_product_id 
    AND manufacturers.manufacturer_id=31
SET prices.override=1 

答案 1 :(得分:0)

如果您正在使用SQL Server for mysql,请尝试此操作:

UPDATE p SET p.override=1
FROM prices p 
INNER JOIN manufacturers ON 
     p.virtuemart_product_id =manufacturers.virtuemart_product_id 
    AND manufacturers.manufacturer_id=31;

答案 2 :(得分:0)

这是MySQL中的正确语法:

UPDATE prices p JOIN
       manufacturers m
       USING (product_id)
    SET p.override=1
WHERE m.manufacturer_id = 31;

请注意表别名的使用。这些使查询更容易编写和阅读。

您使用的语法适用于SQL Server。

答案 3 :(得分:0)

std::vector

答案 4 :(得分:0)

在MySQL中UPDATE JOIN语法不同,SET运算符应位于JOIN语句之后。

正确的UPDATE查询

UPDATE prices P
INNER JOIN manufacturers M ON P.virtuemart_product_id = M.virtuemart_product_id 
                             AND M.manufacturer_id = 31;
SET P.override = 1;