【问题标题】:Update with same table select query throwing error使用同一个表更新选择查询抛出错误
【发布时间】:2022-11-17 18:33:15
【问题描述】:
 UPDATE
   work_info as info1
 SET
   info1.status_id = 1
  WHERE
 info1.info_id IN(
    SELECT info2.info_id
    FROM work_info as info2
      WHERE info2.info_id IN (
        SELECT MAX(info3.info_id)
          FROM work_info as info3
       GROUP BY info3.user_license_id)
    AND info2.status_id = 5)

收到此错误 #1093 - 您无法在 FROM 子句中指定要更新的目标表“info1”

【问题讨论】:

  • 使用多表更新语法。

标签: mysql


【解决方案1】:

直接(不试图理解查询的逻辑):

UPDATE work_info as info1
JOIN work_info as info2 USING (info_id)
JOIN ( SELECT MAX(info_id) info_id
       FROM work_info
       GROUP BY user_license_id 
       ) as info3 USING (info_id)
SET info1.status_id = 1
WHERE info2.status_id = 5;

【讨论】:

    【解决方案2】:
    UPDATE table SET a=value WHERE x IN
        (SELECT x FROM table WHERE condition);
    

    因为它是同一张桌子,所以你可以欺骗和做:

    UPDATE table SET a=value WHERE x IN
        (SELECT * FROM (SELECT x FROM table WHERE condition) as t)
    

    [更新或删除或其他]

    https://www.codeproject.com/Tips/831164/MySQL-can-t-specify-target-table-for-update-in-FRO#:~:text=Some%20days%20back%20while%20writing,select%20as%20your%20update%20criteria

    【讨论】:

    • 这当然解决了.. 但是在语法正确的情况下使用技巧是个坏主意。
    猜你喜欢
    • 1970-01-01
    • 2018-06-20
    • 2013-06-27
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2012-09-16
    相关资源
    最近更新 更多