这些查询在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的一个具体值(但它没有出现在第二个查询结果中),并强制子查询用对应于该field1的日期更改“a.concrete\u date”,则第二个查询返回预期的行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条答案
按热度按时间oiopk7p51#
其中b.field1=a.field2
其中b.field1=a.field1
有区别。