这些查询在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)
)
答案 0 :(得分:1)
其中b.field1 = a.field2
其中b.field1 = a.field1
有区别。