Sql server 仅当select中有一个结果时,才从select更新

Sql server 仅当select中有一个结果时,才从select更新,sql-server,Sql Server,我试图根据另一个表中预先存在的数据在一个表中填充一个新创建的字段,我想到了这个 UPDATE tb1 SET tb2Id = (SELECT tb2.tb2ID FROM tb2 WHERE tb2.f1 = tb1.f1) 问题是f1的某些值在tb2中多次出现。在这些情况下,我希望tb1中tb2Id的值为null。我怎样才能做到这一点 更新:列tb1.tb2Id刚刚添加到表中,因此每一行都为空。您可以使用联接进行更新,同时将tb1中的行限制

我试图根据另一个表中预先存在的数据在一个表中填充一个新创建的字段,我想到了这个

UPDATE tb1
SET tb2Id = (SELECT tb2.tb2ID
             FROM tb2
             WHERE tb2.f1 = tb1.f1)
问题是f1的某些值在tb2中多次出现。在这些情况下,我希望tb1中tb2Id的值为null。我怎样才能做到这一点


更新:列tb1.tb2Id刚刚添加到表中,因此每一行都为空。

您可以使用联接进行更新,同时将tb1中的行限制为仅在t2中使用子查询出现一次的行

UPDATE tb1
  SET tbl1.tb2Id = tbl2.tb2ID
FROM tb1
JOIN tbl2 
ON tb1.f1 = tb2.f1
WHERE tbl1.f1 IN
    (SELECT f1
     FROM tbl2
     GROUP BY f1
     HAVING COUNT(1) = 1)

几乎是我所追求的-我已经澄清,因为这是一个新列,所有行都是空的,所以只需要在正好有1条匹配记录的行上设置值。若你们修改你们的答案,我会把它标记为答案。