gpt4 book ai didi

sql - 多个 id 的更新语句

转载 作者:行者123 更新时间:2023-12-03 01:36:03 31 4
gpt4 key购买 nike

我有 3 个表,我需要通过计算其他两个表的数据来更新第三个表的列。

update table3 set column3=
(
select t2.column3+t1.column3
from table2 t2 with (nolock) join table1 t1
on table2.id=t1.id
where table2.id= 100
)
where id= 100;

这个查询工作正常,它更新第三个表列,但是如果我提供这样的 IN 运算符:

  update table3 set column3=
(
select t2.column3+t1.column3
from table2 t2 with (nolock) join table1 t1
on table2.id=t1.id
where table2.id IN (100,101)
)
where id IN (100,101);

这失败了,我收到了这条消息

子查询返回超过 1 个值。当子查询跟在 =、!=、<、<=、>、>= 后面或子查询用作表达式时,不允许这样做。该声明已终止。

& 我知道这是因为子查询返回超过 1 行,我该如何处理这种情况?任何提示/想法都会有帮助。

如何更新多个 ID? IE。 ID 100 返回的选择查询值应根据第三个表中的 ID 100 进行更新,对于 ID 101 也是如此。

另外,我需要像这样求和 sum(t2.column3)- (t1.column3 + t1.column2)

 update table3 set column3=
(
select sum(t2.column3)- (t1.column3 + t1.column2)
from table2 t2 with (nolock) join table1 t1
on table2.id=t1.id
where table2.id IN (100,101)
)
where id IN (100,101);

最佳答案

这是因为您尝试将 column3 设置为返回的结果,而 SQL 期望该值仅为一个值(标量)。当您向 SQL 引擎传递多个返回值时,SQL 引擎会感到困惑(它应该使用哪一个?...它不假设迭代结果)。因此,如果您想更新整个结果集,那么您需要根据查询创建一个子表并加入该子表。您的查询应该看起来更像这样

UPDATE Table3
SET Column3 = subtable.value
FROM Table3
JOIN (
select t2.column3+t1.column3 as value, t1.id
from table2 t2 with (nolock) join table1 t1
on table2.id=t1.id
where table2.id IN (100,101)
) AS subtable
ON subtable.id = Table3.id
WHERE table3.id IN (100, 101)

在 table3.id 与其他 id 匹配的假设下,您也确实不需要内部 where table2.id IN ...

关于sql - 多个 id 的更新语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10557227/

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