在多表查询中使用选择相同表来更新表。

21 浏览
0 Comments

在多表查询中使用选择相同表来更新表。

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

0
0 Comments

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

这样,问题就得到了解决。

0
0 Comments

问题的原因是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的限制。这是解决这个问题的一种有效方法。

0