【问题标题】:SQL How to Update by INNER JOIN -SQL 如何通过 INNER JOIN 更新 -
【发布时间】:2017-01-16 08:57:34
【问题描述】:

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

嗯,我有两张桌子:

  • 价格
  • 制造商

我想更改表价格中的两个字段的值。 我只会给那些特定的值。

这些字段是:

  • 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 服务器版本相对应的手册,在第 3 行的“FROM jos_virtuemart_product_prices 价格 INNER JOIN jos_virtuemart_product_man”附近使用正确的语法

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

任何帮助将不胜感激!

【问题讨论】:

标签: mysql sql join sql-update alias


【解决方案1】:

你有几个语法问题,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 

【讨论】:

  • 谢谢萨吉。你的建议效果很好!非常感谢!
【解决方案2】:

如果你使用 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;

【讨论】:

  • 他特意说他用的是MySQL,问题标记为 MySQL ,错误为 MySQL 错误。此外,他和您的解决方案也不适用于 MySQL。
  • 抱歉之前没有提到,可以查看编辑日志。是的,在回答之前没有询问 DBMS 是我的错。同意
【解决方案3】:

这是 MySQL 中的正确语法:

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

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

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

【讨论】:

  • 我相信using 可能会让新程序员在学习标准语法之前感到困惑..
  • @sagi 。 . .我不确定您所说的“标准”语法是什么意思,因为 USINGON 都是 ANSI 标准结构。
  • 我知道 USING 是 ANSI ,我的意思是几乎没有加入教程向程序员介绍 USING 除非他们专门搜索它
【解决方案4】:

在 MySQL 中,UPDATEJOIN 语法不同,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;

【讨论】:

    【解决方案5】:
    UPDATE prices  
    SET prices.override=1  
    FROM manufacturers  
    INNER JOIN prices  
    ON manufacturers.product_id=prices.product_id  
    AND manufacturers.manufacturer_id=31;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-07
      • 2021-02-04
      • 2015-07-29
      • 1970-01-01
      • 1970-01-01
      • 2022-07-07
      • 1970-01-01
      • 2014-11-30
      相关资源
      最近更新 更多