首页 > 解决方案 > SQL Server 更新子查询的公式不太正确

问题描述

我有一个名称及其频率的表(table1)

Name-----Frequency

Mike-------0.56

Fred-------0.30

Nancy------0.14

和一个笛卡尔积(table2),其中名称在两列和第三列中配对,我想通过将前两列中的名称匹配回table1来对table1中的频率求和。

Name1-------Name2------sum

Mike--------Fred     

Mike--------Nancy

Fred--------Nancy

我想使用表 1 中的频率和匹配名称的更新中的子查询来更新 table2 的 sum 列(或者这就是我想我需要这样做的方式)。如果有更好的方法请告诉我。

我有:

UPDATE table2
SET sum = (SELECT dbo.table1.Frequency WHERE Name1 = dbo.table1.Name) +
          (SELECT dbo.table1.Frequency WHERE Name2 = dbo.table1.Name)
FROM table1

我得到一个充满 NULL 的表,而不是频率总和。我会以正确的方式解决这个问题吗?我是否完全错过了如何做到这一点并且有更好的方法来做到这一点?

标签: sqlsql-servertsql

解决方案


尝试从这样的连接更新:

update a 
set a.sum=isnull(b.frequency,0)+isnull(c.frequency,0)
from  table2  a
left join table1 b  on a.name1=b.name 
left join table1 c  on a.name2=c.name 

推荐阅读