一尘不染

表被指定两次,既作为“ UPDATE”的目标,又作为mysql中数据的单独来源

mysql

我有以下MySQL查询,我要检查,如果 分支ID年度财务 从类型 branch_master 与平等的
分支ID 经理 ,然后更新状态在 管理 表中对 分公司的ID 经理

UPDATE manager as m1 
  SET m1.status = 'Y'
  WHERE m1.branch_id IN (
    SELECT m2.branch_id FROM manager as m2 
     WHERE (m2.branch_id,m2.year) IN (
        (
          SELECT DISTINCT branch_id,year 
            FROM `branch_master` 
           WHERE type = 'finance'
        )
     )
  )

但出现错误

表’m1’被指定两次,既作为’UPDATE’的目标,又作为数据的单独源


阅读 332

收藏
2020-05-17

共1个答案

一尘不染

这是典型的MySQL问题,通常可以通过从派生表中进行选择来规避,例如

FROM manager AS m2

采用

FROM (select * from manager) AS m2

完整的声明:

UPDATE manager
SET status = 'Y'
WHERE branch_id IN
(
  select branch_id
  FROM (select * from manager) AS m2
  WHERE (branch_id, year) IN
  (
    SELECT branch_id, year
    FROM branch_master
    WHERE type = 'finance'
  )
);
2020-05-17