在Redshift中,我正在将值批量插入到表中。但是,我只想在此列表中插入表中尚不存在的值,以避免添加欺骗。
INSERT INTO $TEST_TABLE values
(A, 1),
(B, 2),
(C, 3)
如果表已经包含(A,1),我希望语句只插入(B,2)和(C,3)。
谢谢!
答案 0 :(得分:7)
没有自动方式只能插入不存在的行(通常称为UPSERT =更新现有行,插入新行)。
你可以将数据加载到临时表,然后执行这样的命令,只插入那些不存在的行:
INSERT INTO target
SELECT * FROM temp
WHERE temp.primary_key NOT IN (SELECT DISTINCT primary_key FROM target)
如果需要,也可以使用类似的方法更新已存在的值。