【发布时间】:2017-07-07 12:17:54
【问题描述】:
我在 mysql 中有以下查询,我想检查 branch id 和 year 的 finance 类型是否来自 branch_master 与 manager 的 branch id 和 year 相等,然后更新状态manager 表针对 manager 中的branch 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' 的目标,又作为 单独的数据源
【问题讨论】:
-
这看起来是正确的,但是 MySQL 可能会混淆
branch_id、year和type在您最后一次选择为m1变量时,因此认为您正在从同一个表中选择您'正在更新,这将导致此错误。尝试将这些变量标识为branch_master.XXX变量,看看是否可以解决问题。 -
SO 中有很多答案尝试使用谷歌搜索 mysql 作为“更新”的目标和单独的数据源
-
@yanman1234 试过但同样的错误
-
@P.Salmon 已经在 google 上进行了检查,并按照答案中的建议将不同的名称应用于 m1 和 m2 表。但仍然无法正常工作
-
尝试拆分您的查询以查看导致错误的部分。硬编码最后一次选择提供的 where 值。如果错误仍然存在,则硬编码设置下一个值,依此类推,直到错误消失。
标签: mysql