sql - 在 Redshift 中有多个列的 WHERE IN

标签 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' 处的所有内容是真的。IN语句的条件总是返回真。

例如:如果我的目标表中有以下值
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 没有)。
关于如何解决这个问题的任何想法?

编辑:添加示例

最佳答案

我会用 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';

关于sql - 在 Redshift 中有多个列的 WHERE IN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52408842/

相关文章:

Mysql:在子表中插入一个新行,其中包含从父表获取的外键列以外的新值

amazon-web-services - 我们可以只使用时间戳列的年月作为 Amazon Redshift 中的分布键吗

apache-spark - 使用 Python 进行 Spark Redshift

mysql - 在左侧选择 group_concat 与 group_concat 加入

具有其他表的多个 id 的 SQL 字段

sql - 使用 difftype=data liquibase 比较数据库之间的数据

sql - 嵌套NVL查询问题

mysql多对多删除级联留下孤儿

hadoop - RedshiftStorage可用于EMR上的Pig作业?

amazon-redshift - 删除表后由 Redshift 回收磁盘空间