【问题标题】:issue in writing sql query [closed]编写sql查询的问题[关闭]
【发布时间】:2020-08-13 13:35:50
【问题描述】:
Table :
ID | ID1 | ID2
 A |     |  
 B |  A  |
 C |     |
 D |  B  |  C
 E |     |


Expected Output :
ID | ID1 | ID2 
 D |  B  |  C
 E |     |



嗨, 我们有一个用例,我们需要过滤掉 ID 与表中任何行的 ID1、ID2 匹配的所有行 有人可以指导我如何在 redshift SQL 中执行此操作吗?

【问题讨论】:

  • 关闭,因为它需要细节或清晰度!有什么不清楚的地方:过滤掉ID与表中任意行的ID1、ID2匹配的所有行
  • @forpas 由于我们的数据量太大,您能否建议对此查询进行一些优化?
  • 这是一个非常简单的设计。我猜 ID 已经被索引了。因此,您可以尝试 id1 和 id2 上的索引和/或 id1 和 id2 的复合索引。

标签: sql amazon-redshift


【解决方案1】:

NOT EXISTS:

select t.* from tablename t
where not exists (
  select 1 from tablename
  where t.id in (id1, id2)
)

请参阅demo

或者使用 LEFT 自连接,从中过滤掉匹配的行:

select t1.* 
from tablename t1 left join tablename t2
on t1.id in (t2.id1, t2.id2)
where t2.id1 is null and t2.id2 is null

请参阅demo

结果:

| ID  | ID1 | ID2 |
| --- | --- | --- |
| D   | B   | C   |
| E   |     |     |

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    相关资源
    最近更新 更多