【发布时间】:2016-02-07 15:57:38
【问题描述】:
我有两个数据库正在合并到一个数据库中。现在它们在一个数据库中,我可以链接它们并使用引用来提高性能,但是首先我需要从一个表中查找 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;
不幸的是,这会失败,因为有时组合会返回多个记录。在这种情况下,我宁愿忽略链接它们,尽管选择第一条记录也是可以接受的。
如何做到这一点?
【问题讨论】:
-
由于没有任何候选键,您的目击表显然是非关系型的。为什么你认为关系工具能够解决这个 ISAM 问题?每个表上都有一个候选键的必要性,即第一范式的实现,是关系工具包正常工作的先决条件。
-
列的数量比我在上面发布的要多,但由于它们在这里不相关,所以为了简单起见,我省略了它们。其中之一是 ID 列。
-
如果可能,添加示例数据和预期结果
-
候选键和外键列总是相关,因为它们定义了数据的含义。省略不相关的属性列很好。
-
我认为您混淆了您的术语。 Sightings (ID) 上的候选键未在此处列出,因为它无关紧要。然而,我确实错过了描述中的外键,为了清楚起见,我现在添加了它,尽管它仍然列在提供的 SQL 语句中。不管怎样,你的评论太挑衅了,我建议你以后把你的语言调低一点。
标签: sql-server tsql merge