van*_*van 5 sql amazon-redshift
我正在使用 Amazon Redshift,其中有两个表。我从 S3 复制所有数据的临时表和最终应插入所有内容的目标表。
现在我的查询应该从临时表中的目标表中删除所有内容,这样我就不会出现重复项。
DELETE FROM xschema.target
WHERE (col1, col2) IN
(
SELECT col1, col2
FROM xschema.staging
)
AND col3 = 'de'
;
Run Code Online (Sandbox Code Playgroud)
查询会执行,但会删除所有col3 = 'de'为真的内容。IN语句的条件总是返回真。
例如:如果我的目标表中有以下值
col1 | col2 | col3 | col4
aaa | 1 | de | 100
bbb | 2 | de | 200
ccc | 1 | us | 180
Run Code Online (Sandbox Code Playgroud)
在我的临时表中,有以下值:
col1 | col2 | col3 | col4
aaa | 1 | de | 100
ddd | 1 | de | 250
Run Code Online (Sandbox Code Playgroud)
我运行上面的查询以从我得到的临时表中删除目标表中的所有值:
col1 | col2 | col3 | col4
ccc | 1 | us | 180
Run Code Online (Sandbox Code Playgroud)
但我希望:
col1 | col2 | col3 | col4
bbb | 2 | de | 200
ccc | 1 | us | 180
Run Code Online (Sandbox Code Playgroud)
到目前为止,我还没有在官方文档或此处找到任何内容(至少对于 redshift 没有)。关于如何解决这个问题的任何想法?
编辑:添加示例
我会用EXISTS:
DELETE
FROM xschema.target t
WHERE EXISTS (SELECT 1 FROM xschema.staging s WHERE s.col1 = t.col1 AND s.col2 = t.col2) AND
col3 = 'de';
Run Code Online (Sandbox Code Playgroud)