在Redshift中有多列的地方

时间:2018-09-19 15:00:11

标签: sql amazon-redshift

我正在使用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而言未找到)。 有关如何解决该问题的任何想法?

编辑:添加了示例

1 个答案:

答案 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';