对于多个ID Update语句(Update statement for multiple ids)

2019-09-17 04:40发布

我有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;

此查询工作正常,它更新第三表列,但是如果我供应,这样的运营商:

  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行,我怎么能处理这种情况? 任何提示/想法会有所帮助。

我如何更新多个ID? 即。 通过ID 100返回的选择查询值应针对在第三表&类似地对于ID 101 ID 100被更新。

另外,我需要做一笔这样的总和(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);

Answer 1:

这是因为你试图设置column3到返回的结果,和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相匹配的其他证件的,你也真的不需要内where table2.id IN ...



Answer 2:

你也应该加入table3中的UPDATE 。 尝试这个:

UPDATE t3
SET column3 = t2.column3+t1.column3
FROM table3 t3
INNER JOIN table2 t2 WITH(NOLOCK) 
ON t3.id = t2.id
INNER JOIN table1 t1
ON t3.id=t1.id
WHERE t3.id IN (100,101)


文章来源: Update statement for multiple ids