【问题标题】:UPDATE table with select the same tablein multi-table queries [duplicate]在多表查询中选择同一个表的更新表[重复]
【发布时间】:2017-01-13 12:12:21
【问题描述】:
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 子句中

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您可以改为使用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 子句中使用来自目标表的选择。

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

    【讨论】:

    • 现在可以使用了,非常感谢!
    【解决方案2】:

    您可以尝试在 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
    

    【讨论】:

    • 'mod'不能短~~也解决了我的问题,非常感谢。
    猜你喜欢
    • 2018-06-20
    • 2023-03-27
    • 1970-01-01
    • 2021-01-15
    • 2014-03-29
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 2021-05-27
    相关资源
    最近更新 更多