在SQL中如何跨行匹配条件?

时间:2016-01-16 00:20:10

标签: sql hive impala

假设我有以下数据:

id value
A  X
A  Y
A  Z
B  X
C  X
C  Y
C  W

并希望找到所有同时具有X和Y值或X和W的id。这些存储在第二个表中:

value1 value2
X      Y
X      W

返回:

id value1 value2
A  X      Y
C  X      Y
C  X      W

这需要大规模工作,其中第一个表有100M行,第二个表有数千行。我将在Impala或Hive中运行。

1 个答案:

答案 0 :(得分:1)

您可以使用group byhaving和一些额外的逻辑来执行此操作:

select id
from data d cross join
     table2 t2
group by id, t2.value1, t2.value2
having sum(case when d.value = t2.value1 then 1 else 0 end) > 0 and
       sum(case when d.value = t2.value2 then 1 else 0 end) > 0;