我有两个数据库,我正在合并到一个数据库中。现在它们在一个数据库中,我可以链接它们并使用引用来提高性能,但是首先我需要从一个表中查找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;
不幸的是,这会失败,因为有时组合会返回多条记录。在这种情况下,我宁愿忽略链接它们,尽管选择第一条记录也是可以接受的。
如何实现这一目标?
答案 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;