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)
)
Il s'agit d'une erreur dans l'exemple de requête et non dans la requête réelle. – Kzas