首页  >  文章  >  数据库  >  为什么使用子查询更新表时 MySQL 会抛出“Table Specified Twice”错误?

为什么使用子查询更新表时 MySQL 会抛出“Table Specified Twice”错误?

Susan Sarandon
Susan Sarandon原创
2024-11-15 02:40:02435浏览

Why Does MySQL Throw

MySQL 错误:在 UPDATE 和源中指定了两次表

当尝试使用提供的 SQL 查询更新管理器表时,MySQL 遇到错误:“表‘m1’被指定两次,既作为‘UPDATE’的目标,又作为单独的数据源。”出现此错误的原因是子查询中两次引用了表管理器。

可以通过修改子查询以从派生表中进行选择来解决该问题。该查询不应直接使用别名 m2,而是应使用 SELECT 语句创建一个临时表,然后从该临时表中进行选择。下面修改后的查询实现了这一点:

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'
  )
);

通过使用派生表,MySQL 可以正确区分 UPDATE 语句中使用的管理器表和子查询中引用的管理器表。这消除了导致错误消息的混乱。

以上是为什么使用子查询更新表时 MySQL 会抛出“Table Specified Twice”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn