在多表查询中使用选择相同表来更新表。
在多表查询中使用选择相同表来更新表。
UPDATE market_order SET is_wechat = 1 WHERE id IN ( SELECT a.id FROM (SELECT id FROM market_template WHERE core_id = 2 AND is_wechat = 1) AS subquery1 INNER JOIN market_order_detail b ON subquery1.id = b.template_id INNER JOIN market_order a ON b.order_id = a.id )
\n错误\n
\n[Err] 1093 - 不能在FROM子句中指定目标表\'market_order\'进行更新\n
UPDATE语句与SELECT语句在多表查询中更新相同表的问题的出现原因是'mod'不能被简写。解决方法是将'mod'更改为'market_order_detail'。
以下是解决方法的代码:
update market_order mo set is_wechat = 1 left join market_order_detail market_order_detail on mo.id = market_order_detail.order_id inner join market_template mt on mt.id = market_order_detail.teplate_id where mt.core_id = 2 and mt.is_wechat = 1
这样,问题就得到了解决。
问题的原因是MySQL不允许在WHERE
子句中使用来自目标表的查询。此外,当使用LEFT JOIN
时,右表的过滤器应该只在ON()
子句中指定。解决方法是使用UPDATE..JOIN
来替代,并将相应的条件放在ON()
子句中。以下是解决方法的代码示例:
UPDATE market_order a JOIN market_order_detail b ON(a.id = b.order_id) JOIN market_template t ON(b.template_id = t.id) SET a.is_wechat = 1 WHERE t.core_id = 2 AND t.is_wechat = 1
通过使用UPDATE..JOIN
语句,我们可以在多表查询中更新表。在这个例子中,我们使用了三个表:market_order,market_order_detail和market_template。我们通过将这些表连接起来,并在ON()
子句中指定相应的条件来更新market_order表。具体来说,我们使用JOIN
关键字将market_order表与market_order_detail表和market_template表连接起来,并使用ON()
子句来指定连接条件。然后,我们使用SET
子句来更新market_order表的is_wechat字段的值为1。最后,我们使用WHERE
子句来指定额外的过滤条件,即t.core_id等于2且t.is_wechat等于1。这样,我们就成功地更新了market_order表中符合条件的记录。
通过使用UPDATE..JOIN
语句,我们可以更灵活地更新表,而不受MySQL的限制。这是解决这个问题的一种有效方法。