2014-09-24 56 views
3

似乎无法达到我的更新查询中的下一步。我能够成功查看与选择相关的列没有问题:与WHERE子句和INNER JOIN不起作用的MySQL更新查询

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"; 

这显示了3列所有与正确的increment_id相关的列。

下一步是更新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"; 

但我不断收到一个不是唯一的表/别名: 'sales_flat_order'错误消息。有人能指出我正确的方向吗?

+0

SET'的位置是否重要?尝试在'UPDATE'语句后面放置'SET' – Grice 2014-09-24 13:26:26

+0

'sales_flat_order'正确吗?在你的选择中你使用'sales_flat_order_grid'? – Jens 2014-09-24 13:26:57

回答

4

该查询应如下所示,您已加入同一个表并因此存在唯一别名问题。为了更好的可读性,我添加了表别名。

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" ; 
+0

谢谢阿比克!这是我的第一个没有错误的工作解决方案。 – sparecycle 2014-09-24 13:40:57

+0

非常欢迎您! – 2014-09-24 13:53:22

0

您需要更新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"; 
0

育有两次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 ...