我正在尝试使用
INSERT
和 UPDATE
而不是使用 MERGE 来实现 SCD2。如果 id 不存在,我需要将源表中的新行插入到目标表中,同时确保列行 compositekey
不为空,而不会使插入崩溃。目前,当我运行选择查询时,我得到了这个结果:
输出:
身份证 | 南 | 哈希 | 复合键 |
---|---|---|---|
1 | 演示 | 222 | 空 |
2 | 演示2 | 22220 | 212 |
3 | 演示3 | 22220 | 空 |
4 | 演示2 | 22220 | 434 |
预期输出:
身份证 | 南 | 哈希 | 复合键 |
---|---|---|---|
2 | 演示2 | 22220 | 212 |
4 | 演示2 | 22220 | 434 |
查询:
Insert into target
SELECT s.ID, s.namn, s.hash, s.compositekey
FROM source s
WHERE NOT EXISTS
(select id, compositekey from target where id = s.id and compositekey is null and s.compositekey is null)
我期望查询能够根据源表中不为空的 id 和组合键过滤掉并只提供目标表中不存在的行。我怀疑我在“is null”部分查询错误。
这取决于TARGET表的内容。 如果“compositekey is null”不为 True,那么 INSERT 将插入具有 NULL 值的 compositekey。
尝试这种方式(Where 应该与 TARGET 表上的 UNIQUE 列一起):
insert into target
SELECT s.ID, s.namn, s.hash, s.compositekey
FROM source s
where (s.ID, s.compositekey) NOT IN
(select id, compositekey from target );