2017-02-17 50 views
0

Эти запросы выполняются в Импале.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) 
) 

ответ

1

где b.field1 = a.field2
где b.field1 = a.field1

Там в разница.

+0

Это ошибка в запросе, а не в реальном запросе. – Kzas