gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 05:51:52 25 4
gpt4 key购买 nike

我有这个代码:

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 表,并且 RECURSE_HOURLVLMAX_RECURSE 来自 WORLD_TEST_PROGRAMMER 表。

最佳答案

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

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

如果是多表查询,建议使用Aliasing为了代码的可读性和避免模棱两可的行为。

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

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

关于mysql - SQL - #1093 - 表 '' 被指定了两次,既作为 'UPDATE' 的目标又作为单独的数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53223078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com