我有两个插入声明。第一个查询是在目标表中不存在id的情况下插入新行。第二个查询只在联合id哈希值不同(指示源表中的行已更新)且源表中的id不为空时才插入目标表。这些解决方案用于我的SCD2解决方案,它将用于数十万行的插入。我不想在实践中使用合并语句。
列"Current“值1表示该行是新行,0表示该行已过期。稍后,我将使用此信息将目标表中的行与更新查询一起过期。
除了索引之外,是否有一种更有能力和更有效的方法来改进插入查询,类似于SCD2合并语句中插入新行/更新行的方式?
查询:
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发布于 2022-11-30 18:33:57
您可以使用WHERE NOT EXISTS,并且只有一个INSERT语句:
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;https://stackoverflow.com/questions/74632398
复制相似问题