Эти запросы выполняются в Импале.Impala - существует (подзапрос) VS 0 <(выберите счетчик (*) ...)
Два похожих запроса, которые должны иметь одинаковый результат, но имеют два разных результата.
Этот запрос получает все ожидаемые результаты (около 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)
)
Где есть разница между ?? Я не вижу этого ...
В моих тестах, если взять одно конкретное значение поля1 из моего первого запроса (но это не отображается во втором результате запроса) и заставить подзапрос изменить значение 'a .concrete_date»с датой, которая соответствует этому field1, то второй запрос возвращает ожидаемый строку ОК
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)
)
Это ошибка в запросе, а не в реальном запросе. – Kzas