Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用另一个表中的值更新一个表(该表有3个键,在另一个匹配表中仅找到2个键)_Sql_Sql Server_Merge - Fatal编程技术网

Sql 使用另一个表中的值更新一个表(该表有3个键,在另一个匹配表中仅找到2个键)

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中有

表1(关键字段-Id、帐户)

  • Id、帐户、SalesRepID
表2(关键字段-Id、帐户、代码)

  • Id、帐户、序列、SalesRepID
当Table2.Sequence=1时,应使用Table2.SalesRepID更新Table1.SalesRepID。(共有10个序列,每个序列都有一个SalesRedID)

这会抛出一个错误-

子查询返回了多个值。当子查询在=、!=、=或者当子查询用作表达式时

请让我知道应该在更新语句中修复什么?
应该使用合并吗?

您不了解错误的哪一部分

表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