我有这个密码:
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-表“world\u test”被指定两次,既作为“update”的目标,也作为单独的数据源
编辑(评论澄清): PROGRAMMER
以及 LVL_PROGRAMMER
来自 WORLD_TEST
table,和 RECURSE_HOUR
, LVL
, MAX_RECURSE
来自 WORLD_TEST_PROGRAMMER
table。
1条答案
按热度按时间ssm49v7z1#
错误信息非常清楚,您不能在中使用同一个表
UPDATE
子句以及子查询的源。还有其他方法可以实现这一点,比如使用派生表等。在这种情况下,您只需要JOIN
在两张table之间。另外,请不要使用旧的基于逗号的隐式联接,并切换到现代显式联接
Join
基于语法在多表查询的情况下,建议使用别名以提高代码可读性并避免模棱两可的行为。
根据您在评论中的进一步澄清,请尝试以下操作: