在两个单独的SQL表中组合两个值

在两个单独的SQL表中组合两个值,sql,sql-update,Sql,Sql Update,我有两个SQL表,如下所示: tblparts ---------------------------- Part Quantity ---------------------------- AAA1000 1 AAB1000 2 AAC1000 3 第二个名字叫“tblestparts”: tblestparts ---------------------------- ID Part Quantity ---

我有两个SQL表,如下所示:

tblparts
----------------------------
Part          Quantity
----------------------------
AAA1000       1
AAB1000       2
AAC1000       3
第二个名字叫“tblestparts”:

tblestparts
----------------------------
ID      Part          Quantity
----------------------------
1       AAA1000       20
1       AAB1000       21
1       AAC1000       22
2       AAA1000       15
我想将TBLESPARTS中显示的零件AAA1000的数量添加到tblparts中显示的数量,其中TBLESPARTS中的ID=1,并将tblparts中零件AAA1000的数量数字更新为该组合数字

因此结果是TBLPart现在看起来像这样:

tblparts
----------------------------
Part          Quantity
----------------------------
AAA1000       21
AAB1000       2
AAC1000       3
我已经做了一些尝试,并得出了以下结论,但可惜它不起作用,我不知道我哪里出了问题

UPDATE tblparts SET tblparts.Quantity = tblparts.Quantity + tblestparts.Quantity FROM tblparts INNER JOIN tblestparts ON tblestparts.Part = tblparts.Part WHERE tblparts.Part = 'AAA1000' AND tblestparts.ID = 1

感谢您提前提出的建议

在许多数据库中,相关子查询可能有效。假设源表中始终存在匹配项:

update tblparts p
set quantity = quantity + (select e.quantity from tblestparts e where e.part = p.part)

当你说不行时,你是什么意思?假设它是SQLServer-T-SQL,那么您所做的看起来是正确的

因此,要将您的场景转换为使用表变量,因此表名称上有@前缀-即这是一个变量,那么下面给出了您想要的:

设置 使现代化 为了简单起见,我在这里所做的只是将查询更改为使用别名。此外,这里不需要使用和st.ID=1

后果 以下查询:

select *
from @tblparts
产生以下结果:

AAA1000 21  
AAB1000 2  
AAC1000 3   

问题是,在您的查询中,您只能运行一次,然后才能从更新中丢失初始数据。

用您正在使用的数据库标记您的问题。与您的问题无关,但您可能希望阅读“谢谢”,这是可行的:更新tblparts p SET Quantity=Quantity+从tblestparts e中选择e.Quantity,其中e.Part=p.Part和p.Part='AAA1000'和e.ID='1'。然而,让事情稍微复杂一点,如果我需要更新数组中的多个部件号,所有部件号都在同一个ID号上,我尝试了以下方法,但它没有做任何事情?更新tblparts p SET QUOTE=QUOTE+从TBLEST零件e中选择e.QUOTE,其中e.Part=p.Part和p.Part在'AAA1000,AAB1000'和e.ID='1'中,我真的非常感谢大家对此的关注和帮助。@nb86:最好分别传递参数:。。。p、 “AAA1000”、“AAB1000”和…我现在发现了一个小问题,如果您使用“tblestparts”表中不存在的ID号运行语句,比如“3”,出于某种原因,它会将“tblparts”表中的每个数量值设置为零?事实上,这比这更糟糕,对于不在in数组中的每个零件,将TBLPart中的数量设置为0?感谢您的帮助:
select *
from @tblparts
AAA1000 21  
AAB1000 2  
AAC1000 3