Sql 使用另一个表中的值更新一个表(该表有3个键,在另一个匹配表中仅找到2个键)
表1(关键字段-Id、帐户)Sql 使用另一个表中的值更新一个表(该表有3个键,在另一个匹配表中仅找到2个键),sql,sql-server,merge,Sql,Sql Server,Merge,表1(关键字段-Id、帐户) Id、帐户、SalesRepID 表2(关键字段-Id、帐户、代码) Id、帐户、序列、SalesRepID 当Table2.Sequence=1时,应使用Table2.SalesRepID更新Table1.SalesRepID。(共有10个序列,每个序列都有一个SalesRedID) 这会抛出一个错误- 子查询返回了多个值。当子查询在=、!=、=或者当子查询用作表达式时 请让我知道应该在更新语句中修复什么? 应该使用合并吗?您不了解错误的哪一部分 表2中有
- Id、帐户、SalesRepID
- Id、帐户、序列、SalesRepID
应该使用合并吗?您不了解错误的哪一部分
表2中有多行符合条件。您可以通过以下方式找到这些选项:
select id, PatientAccount
from table2
where sequence = 1
group by id, PatientAccount
having count(*) > 1;
您可以使用以下方法使查询正常工作:
update Table1
set SalesRepID = (select top (1) t2.SalesRepID
from Table2 t2
where Table1.ID = t2.ID and
Table1.Account = t2.PatientAccount and
t2.Sequence = 1
);
然而,这是一种蛮力方法/黑客。您确实需要找出数据的错误(也就是说,为什么您认为子查询在返回多行时应该返回一行)。您最好改用JOIN
UPDATE t1
SET
t1.SalesRepID = t2.SalesRepID
FROM Table1 t1
JOIN Table2 t2 ON t1.ID = t2.ID AND t1.Account = t2.PatientAccount AND t2.Sequence = 1
维护和扩展会容易得多。如果有多条记录的Table2.Sequence=1
,那么更新逻辑本身就没有意义,因为不清楚要在更新中使用哪个值。为了获得最佳结果,请在问题中添加一些示例数据。
UPDATE t1
SET
t1.SalesRepID = t2.SalesRepID
FROM Table1 t1
JOIN Table2 t2 ON t1.ID = t2.ID AND t1.Account = t2.PatientAccount AND t2.Sequence = 1