带有 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 之前的 WHERE 子句

INNER JOIN Where 子句 [重复]

`INNER JOIN` 过滤条件在查询中的位置; `ON` 或 `WHERE` 子句 [关闭]

在 SQL Server 查询的 WHERE 子句中引用或 INNER JOIN 一个 Pandas 数据帧值 [重复]

Oracle中Inner join和Where的区别

Oracle中Inner join和Where的区别