带有 WHERE 子句和 INNER JOIN 的 MySQL 更新查询不起作用
Posted
技术标签:
【中文标题】带有 WHERE 子句和 INNER JOIN 的 MySQL 更新查询不起作用【英文标题】:MySQL update query with WHERE clause and INNER JOIN not working 【发布时间】:2014-11-19 00:22:19 【问题描述】:在我的更新查询中似乎无法进入下一步。我能够成功查看与选择相关的列没问题:
SELECT sales_flat_order_grid.entity_id,sales_flat_order_grid.increment_id,sales_flat_order.coupon_code
FROM sales_flat_order_grid
INNER JOIN sales_flat_order ON sales_flat_order_grid.entity_id = sales_flat_order.entity_id
WHERE sales_flat_order_grid.increment_id = "12345678";
这显示了与正确的 increment_id 相关的 3 列。
下一步是更新 sales_flat_order.coupon_code 字段。这是我的尝试:
UPDATE sales_flat_order
INNER JOIN sales_flat_order ON sales_flat_order_grid.entity_id = sales_flat_order.entity_id
WHERE sales_flat_order_grid.increment_id = "12345678"
SET coupon_code = "newcoupon";
但我不断收到 Not unique table/alias: 'sales_flat_order' 错误消息。有人能指出我正确的方向吗?
【问题讨论】:
SET
的位置重要吗?尝试将 SET
作为 UPDATE
声明之后的声明
sales_flat_order
对吗?在您的选择中,您使用sales_flat_order_grid
?
【参考方案1】:
查询应如下所示,您已加入同一个表,因此存在唯一别名问题。我添加了表格别名以提高可读性。
UPDATE
sales_flat_order sfo
INNER JOIN sales_flat_order_grid sfog
ON sfog.entity_id = sfo.entity_id
SET sfo.coupon_code = "newcoupon"
WHERE sfog.increment_id = "12345678" ;
【讨论】:
感谢阿比克!这是我这边第一个没有错误的可行解决方案。【参考方案2】:你有两次sales_flat_order
,换成sales_flat_order_grid
UPDATE sales_flat_order
INNER JOIN sales_flat_order_grid ... -- Need change the namme of the table
如果要加入同一张表,请使用ALIAS
UPDATE sales_flat_order AS sfo1
INNER JOIN sales_flat_order AS sfo2 ...
【讨论】:
【参考方案3】:您需要更新sales_flat_order
并加入sales_flat_order_grid
- 您已加入sales_flat_order
:
UPDATE sales_flat_order
INNER JOIN sales_flat_order_grid
ON sales_flat_order_grid.entity_id = sales_flat_order.entity_id
WHERE sales_flat_order_grid.increment_id = "12345678"
SET coupon_code = "newcoupon";
【讨论】:
以上是关于带有 WHERE 子句和 INNER JOIN 的 MySQL 更新查询不起作用的主要内容,如果未能解决你的问题,请参考以下文章
`INNER JOIN` 过滤条件在查询中的位置; `ON` 或 `WHERE` 子句 [关闭]
在 SQL Server 查询的 WHERE 子句中引用或 INNER JOIN 一个 Pandas 数据帧值 [重复]