sql - 在 MERGE 语句中替代 EXCEPT?
问题描述
我正在编写一个查询以将我的 STG 表中的数据合并到我的数据表中,并且我想从 STG 表中排除在数据表中完全存在的任何数据。我编写了以下代码,它可以满足我的需要,但是 EXCEPT 语句会导致对数据表的大量读取。我可以尝试提高性能吗?
MERGE INTO Table AS Target
USING
( /*EXCEPT STATEMENT REMOVES ANY ROWS WHICH HAVE BEEN MODIFIED, BUT NONE OF THE COLUMNS WHICH CHANGED WERE BROUGHT OVER*/
SELECT TimesheetEntryID
,UserID
,StartDateTime
,EndDateTime
,TimesheetTaskTypeID
,TaskID
FROM Table_STG
EXCEPT
SELECT TimesheetEntryID
,UserID
,StartDateTime
,EndDateTime
,TimesheetTaskTypeID
,TaskID
FROM Table
) AS Source
ON Target.TimesheetEntryID = Source.TimesheetEntryID
WHEN MATCHED
THEN
UPDATE SET Target.TimesheetEntryID = Source.TimesheetEntryID,
Target.UserID = Source.UserID,
Target.StartDateTime = Source.StartDateTime,
Target.EndDateTime = Source.EndDateTime,
Target.TimesheetTaskTypeID = Source.TimesheetTaskTypeID,
Target.TaskID = Source.TaskID
WHEN NOT MATCHED BY TARGET THEN
INSERT (
TimesheetEntryID
,UserID
,StartDateTime
,EndDateTime
,TimesheetTaskTypeID
,TaskID
)
VALUES (
Source.TimesheetEntryID
,Source.UserID
,Source.StartDateTime
,Source.EndDateTime
,Source.TimesheetTaskTypeID
,Source.TaskID
);
解决方案
您可以使用not in
或not exists
不在
SELECT TimesheetEntryID
,UserID
,StartDateTime
,EndDateTime
,TimesheetTaskTypeID
,TaskID
FROM Table_STG where (TimesheetEntryID ,UserID ,StartDateTime ,EndDateTime
,TimesheetTaskTypeID ,TaskID) not in
(SELECT TimesheetEntryID ,UserID ,StartDateTime ,EndDateTime ,TimesheetTaskTypeID
,TaskID from table);
不存在
SELECT TimesheetEntryID
,UserID
,StartDateTime
,EndDateTime
,TimesheetTaskTypeID
,TaskID
FROM Table_STG STG where (TimesheetEntryID ,UserID ,StartDateTime ,EndDateTime
,TimesheetTaskTypeID ,TaskID) not exitst
(SELECT 1 from table where TimesheetEntryID = STG.TimesheetEntryID ,UserID =
STG.UserID ,StartDateTime = STG.StartDateTime
,EndDateTime = STG.EndDateTime ,TimesheetTaskTypeID = STG.TimesheetTaskTypeID ,TaskID
= STG.TaskID)
推荐阅读
- javascript - 如何强制更新我的反应代码中的组件以将深色主题切换为浅色主题
- amazon-web-services - 服务未响应 ping 命令
- android - Kotlin - Android Studio - 公共变量问题
- php - PHP数组从另一个值的函数声明值
- group-by - 在 Power Query 中“按所有行分组”操作后删除第一列
- json - 解析字符串化的 JSON
- python - 无法透视 DataFrame,没有唯一索引
- php - Google ReCaptcha 表单未发送到电子邮件
- javascript - 如何控制svg元素的宽度和高度
- python - 在pygame中使矩形透明