T-SQL合并返回多个结果

时间:2016-02-07 15:57:38

标签: sql-server tsql merge

我有两个数据库,我正在合并到一个数据库中。现在它们在一个数据库中,我可以链接它们并使用引用来提高性能,但是首先我需要从一个表中查找ID,然后将其插入到另一个表中,因为当前没有外键。

表结构如下:

瞄准:注册,FrameDeliveryDate,RegistrationID

注册:ID,RegistrationNo,DeliveryDate

目前,注册和交付日期的组合用于识别记录。

我尝试过以下声明:

MERGE INTO Sightings
USING Registrations
  ON Sightings.Registration = Registrations.RegistrationNo AND Sightings.FrameDeliveryDate = Registrations.DeliveryDate 
WHEN MATCHED THEN
UPDATE 
  SET RegistrationID = Registrations.ID;

不幸的是,这会失败,因为有时组合会返回多条记录。在这种情况下,我宁愿忽略链接它们,尽管选择第一条记录也是可以接受的。

如何实现这一目标?

1 个答案:

答案 0 :(得分:2)

要忽略具有多个匹配的这些组合,因此可以使用不明确的值,您可以使用派生表或CTE。

WITH CTE1 AS
(
SELECT *,
       COUNT(*) OVER (PARTITION BY RegistrationNo, DeliveryDate) AS Cnt
FROM Registrations
), CTE2 AS
(
SELECT *
FROM CTE1
WHERE Cnt = 1
)
    MERGE INTO Sightings
    USING CTE2 Registrations
      ON Sightings.Registration = Registrations.RegistrationNo AND Sightings.FrameDeliveryDate = Registrations.DeliveryDate 
    WHEN MATCHED THEN
    UPDATE 
      SET RegistrationID = Registrations.ID;
相关问题