SQL如何通过INNER JOIN更新 -

Vic*_*ria 10 mysql sql alias join sql-update

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

好吧,我有两张桌子:

  • 价格
  • 制造商

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

这些领域是:

  • price.override(我想在其中给出值0)和
  • price.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;
Run Code Online (Sandbox Code Playgroud)

但是当我尝试更新这两个字段时,我不知道如何做到这一点.例如,我试过这个,但它不起作用:

UPDATE prices
SET prices.override=1
FROM
INNER JOIN prices
ON manufacturers.product_id=prices.product_id
AND manufacturers.manufacturer_id=31;
Run Code Online (Sandbox Code Playgroud)

我也试过这个:

UPDATE prices
SET prices.override=1, 
INNER JOIN manufacturers 
ON prices.virtuemart_product_id = manufacturers.virtuemart_product_id 
AND manufacturers.manufacturer_id=31;
Run Code Online (Sandbox Code Playgroud)

我做错了什么?通常我收到的错误消息是:

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

我读了别名的东西,但仍然没有结果.

任何帮助,将不胜感激!

sag*_*agi 3

你有一些语法问题,MySQLUPDATE..JOIN语法是:

UPDATE T
JOIN t2 ON()
SET ..
WHERE ..
Run Code Online (Sandbox Code Playgroud)

其次,在 , 之后有一个不必要的逗号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 
Run Code Online (Sandbox Code Playgroud)