我有两张桌子。登台表每天刷新,并用今天的日期替换
LoadDate
列。该数据被插入到我只想插入新数据的最终表中。
临时表:
机器名 | 应用名称 | 加载日期 |
---|---|---|
A | 卓越 | 22-02-2023 |
乙 | 卓越 | 22-02-2023 |
C | 简报 | 22-02-2023 |
D | 字 | 22-02-2023 |
A | 字 | 22-02-2023 |
C | 字 | 22-02-2023 |
决赛桌:
机器名 | 应用名称 | 加载日期 |
---|---|---|
A | 卓越 | 20-02-2023 |
乙 | 卓越 | 20-02-2023 |
C | 简报 | 21-02-2023 |
A | 字 | 21-02-2023 |
我这样写我的查询:
INSERT INTO [Final]
SELECT *
FROM [Staging]
WHERE NOT EXISTS (SELECT 1 FROM [FINAL]
WHERE [Final].[MachineName] = [Staging].[MachineName]
AND [Final].[ApplicationName] = [Staging].[ApplicationName])
例如,在决赛桌中,A-Excel、B-Excel、C-PowerPoint 和 A-Word 已经出现在表格中,因此它们保持原样。在暂存表中,C-Word 和 D-Word 是新值,需要将其插入到最终表中。尽管我已尽我所知编写了查询,但我在最终表中得到了不应该发生的重复值。我做错了什么?
您的查询应该按预期工作。您确定您提供了导致重复的 SQL 吗?
作为替代方案,这里有一个 MERGE 语句:
MERGE Final AS tgt
USING Staging AS src
ON tgt.MachineName=src.MachineName
AND tgt.ApplicationName=src.ApplicationName
WHEN NOT MATCHED BY TARGET THEN
INSERT(MachineName, ApplicationName, LoadDate)
VALUES(MachineName,ApplicationName,LoadDate);