我正在使用Amazon Redshift,其中有两个表。我从S3复制所有数据的暂存表和最终应插入所有内容的目标表。
现在,我有一个查询,该查询应从登台表中的目标表中删除所有内容,以免重复。
DELETE FROM xschema.target
WHERE (col1, col2) IN
(
SELECT col1, col2
FROM xschema.staging
)
AND col3 = 'de'
;
执行查询,但删除col3 = 'de'
为true的所有内容。
语句的IN
条件始终返回true。
例如:如果我的目标表中包含以下值
col1 | col2 | col3 | col4
aaa | 1 | de | 100
bbb | 2 | de | 200
ccc | 1 | us | 180
在我的登台表中,以下值:
col1 | col2 | col3 | col4
aaa | 1 | de | 100
ddd | 1 | de | 250
然后运行上面的查询,从我得到的登台表中删除目标表中的所有值:
col1 | col2 | col3 | col4
ccc | 1 | us | 180
但是我希望:
col1 | col2 | col3 | col4
bbb | 2 | de | 200
ccc | 1 | us | 180
到目前为止,我在官方文档中或此处均未找到任何内容(至少对于redshift而言未找到)。 有关如何解决该问题的任何想法?
编辑:添加了示例
答案 0 :(得分:2)
我会使用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';