2017-02-17 2 views
0

Ces requêtes s'exécutent dans Impala.Impala - existe (sous-requête) VS 0 <(select count (*) ...)

Deux requêtes similaires qui devraient avoir le même résultat, mais avec deux résultats différents.

Cette requête obtient tous les résultats attendus (environ 130 dans mon cas réel)

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) 
) 

Cette requête renvoie une petite partie des résultats (environ 10 dans mon cas réel)

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) 
) 

Où est la difference entre ?? Je ne peux pas le voir ...

Dans mes tests, si je prends une valeur concrète de champ1 à partir de ma première requête (mais cela n'apparaît pas dans les résultats de la deuxième requête) et force la sous-requête en changeant le 'a .concrete_date » avec la date qui correspond à celle field1, la seconde requête retourne la ligne attendue 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) 
) 

Répondre

1

où b.field1 = a.field2
où b.field1 = a.field1

Il y a la différence.

+0

Il s'agit d'une erreur dans l'exemple de requête et non dans la requête réelle. – Kzas