UPDATE表与多表查询中选择相同的表

时间:2016-09-06 06:43:17

标签: mysql

UPDATE market_order
SET is_wechat = 1
WHERE
    id IN (
        SELECT
            a.id
        FROM
            market_order a
        LEFT JOIN market_order_detail b ON a.id = b.order_id
        WHERE
            b.template_id IN (
                SELECT
                    id
                FROM
                    market_template
                WHERE
                    core_id = 2
                AND is_wechat = 1
            )
    )

错误

  

[Err] 1093 - 您无法指定目标表'market_order'进行更新   在FROM子句中

2 个答案:

答案 0 :(得分:0)

您可以使用UPDATE..JOIN来代替:

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

MySQL不允许在WHERE子句中使用目标表中的select。

此外 - 使用LEFT JOIN时,只应在ON()子句中指定右表上的过滤器。

答案 1 :(得分:0)

您可以尝试在1个查询中进行此操作:

update market_order mo set is_wechat = 1 left join 
market_order_detail mod on mo.id = mod.order_id inner join 
market_template mt on mt.id = mod.teplate_id where mt.core_id = 2
and mt.is_wechat = 1