我有一个表有两列Hotel_Guest_ID和Guest_ID,用于将访客记录链接到该访客的酒店详细信息。该表具有每对需要唯一的约束。
我现在有了第二个Prime_ID和Duplicate_ID表,它是在清理重复的Guest表后生成的。我想通过Booking表,如果找到Hotel.Guest_ID为Duplicate_ID,则将其替换为Prime_ID。
update b
set h.Guest_ID = gd.Prime_ID
from Hotel as h
join Guest_Duplicates as gd
on h.Guest_ID = gd.Duplicate_ID
然而,这会失败,因为Prime_ID通常已经有一个特定Guest的记录,此时我想删除这一行而不是更新它。
有没有一种很好的方法可以在一次传递中执行此操作,或者我是否必须首先删除潜在的冲突行,然后在第二次查询中更新?
答案 0 :(得分:3)
您要找的是MERGE
声明。您可以使用单个语句插入,更新和删除。这是一个例子 -
MERGE Table1 AS t1
USING Table2 AS t2
ON t1.GuestID = t2.DuplicateID
WHEN MATCHED AND (any condition)
THEN DELETE
WHEN MATCHED
THEN UPDATE SET (assign statement)
WHEN NOT MATCHED
THEN
INSERT(column names)
VALUES(values to be inserted);