SQL - #1093 - Table '' 被指定了两次,既作为 'UPDATE' 的目标又作为单独的数据源

SQL - #1093 - Table '' is specified twice, both as a target for 'UPDATE' and as a separate source for data

我有这个代码:

UPDATE WORLD_TEST 
SET PROGRAMMER = (SELECT (RECURSE_HOUR/360) 
                  FROM WORLD_TEST_PROGRAMMER, WORLD_TEST 
                  WHERE LVL = LVL_PROGRAMMER) 
WHERE (SELECT MAX_RECURSE 
       FROM WORLD_TEST_PROGRAMMER, WORLD_TEST 
       WHERE LVL = LVL_PROGRAMMER) 
>= 
(PROGRAMMER+(SELECT (RECURSE_HOUR/360) 
             FROM WORLD_TEST_PROGRAMMER, WORLD_TEST 
             WHERE LVL = LVL_PROGRAMMER));

出现此错误:

1093 - Table 'WORLD_TEST' is specified twice, both as a target for 'UPDATE' and as a separate source for data

编辑(来自评论的澄清): PROGRAMMERLVL_PROGRAMMER 来自 WORLD_TEST table 和 RECURSE_HOUR, LVL, MAX_RECURSE 来自 WORLD_TEST_PROGRAMMER table.

错误消息很清楚,您不能在 UPDATE 子句中使用相同的 table 以及子查询的源。还有其他方法可以实现这一点,比如使用派生表等。在这种特殊情况下,您只需要在两个 table 之间 JOIN

此外,请不要使用旧的基于逗号的隐式连接并切换到现代 Explicit Join based syntax

如果有多个table 查询,建议使用Aliasing 以提高代码可读性并避免模棱两可的行为。

根据您在 中的进一步说明,尝试以下操作:

UPDATE WORLD_TEST AS wt 
JOIN WORLD_TEST_PROGRAMMER AS wtp 
  ON wt.LVL_PROGRAMMER = wtp.LVL 
SET wt.PROGRAMMER = wtp.RECURSE_HOUR
WHERE wtp.MAX_RECURSE >= (wt.PROGRAMMER + (wtp.RECURSE_HOUR/360))