SQL 如何通过 INNER JOIN 更新 -
Posted
技术标签:
【中文标题】SQL 如何通过 INNER JOIN 更新 -【英文标题】:SQL How to Update by 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”附近使用正确的语法
我读了一些别名,但仍然没有结果。
任何帮助将不胜感激!
【问题讨论】:
格式正确的问题,+1。 结构不佳的问题。 -1 见meta.***.com/questions/333952/… 【参考方案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 。 . .我不确定您所说的“标准”语法是什么意思,因为 USING
和 ON
都是 ANSI 标准结构。
我知道 USING
是 ANSI ,我的意思是几乎没有加入教程向程序员介绍 USING
除非他们专门搜索它【参考方案4】:
在 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;
【讨论】:
【参考方案5】:UPDATE prices
SET prices.override=1
FROM manufacturers
INNER JOIN prices
ON manufacturers.product_id=prices.product_id
AND manufacturers.manufacturer_id=31;
【讨论】:
以上是关于SQL 如何通过 INNER JOIN 更新 -的主要内容,如果未能解决你的问题,请参考以下文章
带有 SELECT 和 INNER JOIN 的 SQL INSERT INTO
INNER JOIN与LEFT JOIN在SQL Server的性能
SQL中inner join,outer join和cross join的区别