Impala - 存在(子查询)VS 0< (选择计数(*)...)

时间:2017-02-17 12:21:47

标签: sql aggregate exists impala

这些查询在Impala中运行。

两个类似的查询应该具有相同的结果,但有两个不同的结果。

此查询获得预期的所有结果(在我的实际情况下约为130)

select field1, field2, concrete_date
from tableA a
where exists(select *
    from tableB b
    where b.field1 = a.field1
        and b.concrete_date > (a.concrete_date + interval -5 minutes) 
        and b.concrete_date < (a.concrete_date + interval  5 minutes) 
)

此查询返回一小部分结果(在我的实际案例中约为10)

select field1, field2, concrete_date
from tableA a
where 0 < (select count(*)
    from tableB b
    where b.field1 = a.field1
        and b.concrete_date > (a.concrete_date + interval -5 minutes) 
        and b.concrete_date < (a.concrete_date + interval  5 minutes) 
)

两者之间的区别在哪里?我看不出来......

在我的测试中,如果我从第一个查询中获取field1的一个具体值(但是没有出现在第二个查询结果中)并强制子查询将'a.concrete_date'更改为与该对应的日期相对应的日期field1,第二个查询返回预期的行ok

select field1, field2, concrete_date
from tableA a
where 0 < (select count(*)
    from tableB b
    where b.field1 = 'XXXXX'
        and b.concrete_date > ('2017-01-01 00:00:00' + interval -5 minutes) 
        and b.concrete_date < ('2017-01-01 00:00:00' + interval  5 minutes) 
)

1 个答案:

答案 0 :(得分:1)

其中b.field1 = a.field2
其中b.field1 = a.field1

有区别。