根据不匹配的列值将数据从另一个表插入表

问题描述 投票:0回答:1

我有两张桌子。登台表每天刷新,并用今天的日期替换

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 sql-server subquery correlated-subquery
1个回答
0
投票

您的查询应该按预期工作。您确定您提供了导致重复的 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);
© www.soinside.com 2019 - 2024. All rights reserved.