错误:在 MySQL 查询中指定了两次表
在 MySQL 中,当尝试更新表并同时将其用作数据源时相同的查询,可能会出现错误“表'm1'被指定两次,既作为'UPDATE'的目标,又作为单独的数据源”。此错误源于 MySQL 在处理此类查询时的限制。
为了解决此问题,MySQL 要求用户从派生表中进行选择,而不是直接在子查询中使用表的别名。这涉及到基于原始表创建临时表并在子查询中引用派生表。
修订的查询:
这里是查询的修订版本:利用派生表来规避错误:
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' ) );
通过从派生表中进行选择(由“(SELECT * FROM manager) AS m2”表示),查询避免了导致先前错误的歧义。派生表充当独立的数据源,使查询能够引用该表,既作为更新的目标,又作为子查询的数据源。
以上是如何解决MySQL更新和查询同一个表时出现'Table Specified Twice”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!