首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >改进SCD2解决方案的插入查询

改进SCD2解决方案的插入查询
EN

Stack Overflow用户
提问于 2022-11-30 18:13:09
回答 1查看 19关注 0票数 0

我有两个插入声明。第一个查询是在目标表中不存在id的情况下插入新行。第二个查询只在联合id哈希值不同(指示源表中的行已更新)且源表中的id不为空时才插入目标表。这些解决方案用于我的SCD2解决方案,它将用于数十万行的插入。我不想在实践中使用合并语句。

列"Current“值1表示该行是新行,0表示该行已过期。稍后,我将使用此信息将目标表中的行与更新查询一起过期。

除了索引之外,是否有一种更有能力和更有效的方法来改进插入查询,类似于SCD2合并语句中插入新行/更新行的方式?

查询:

代码语言:javascript
复制
Query 1:
INSERT INTO TARGET
SELECT Name,Middlename,Age, 1 as current,Row_HashValue,id
from Source s
Where s.id not in (select id from TARGET) and s.id is not null

Query 2:
INSERT INTO TARGET
SELECT Name,Middlename,Age,1 as current ,Row_HashValue,id
FROM SOURCE s 
LEFT JOIN TARGET t ON s.id = t.id
AND s.Row_HashValue = t.Row_HashValue
WHERE t.Row_HashValue IS NULL and s.ID IS NOT NULL
EN

回答 1

Stack Overflow用户

发布于 2022-11-30 18:33:57

您可以使用WHERE NOT EXISTS,并且只有一个INSERT语句:

代码语言:javascript
复制
INSERT INTO TARGET
SELECT Name,Middlename,Age,1 as current ,Row_HashValue,id
FROM SOURCE s 
WHERE NOT EXISTS (
    SELECT 1
    FROM TARGET t 
    WHERE s.id = t.id
    AND s.Row_HashValue = t.Row_HashValue)
AND s.ID IS NOT NULL;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74632398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档