Bonjour,
Je dois faire un requête en HQL, et je ne comprend pas pourquoi elle ne me ramène rien... alors je m'en remet à vous !
Voici l'idée
soit une table A qui pointe sur une table B une table C et une table D
on doit faire une requête sur D, pas d'autre choix, car en fait il y a plein d'autre tables et la requête porte sur plein de ces tables.
Code :
- SELECT DISTINCT d
- FROM D d
- LEFT OUTER JOIN d.a a_join
- LEFT OUTER JOIN a_join.b b
- WHERE d IN (SELECT DISTINCT abis.d FROM A abis WHERE :variable0 > abis.tata)
- AND b.id = :variable1 and b.toto = 1
|
Je ne peux pas utiliser IN ELEMENTS, car les tables D et B ne sont pas reliés directement
Je sais que je pourrais faire avec WITH, mais comme je dois générer cette requête avec plein d'autre conditions, ça m'arrangerait de pouvoir la faire avec juste une clause WHERE variable
Cette requête fonctionne, mais elle ne me ramène rien, alors que quand je vérifie directement en SQL sur la base, il devrait y avoir des réponses.
La question est donc, dans les étapes d'évaluation de cette requête, que ce passe t'il, où est ce que ça cloche ?
Car si je m'imagine bien ce qui se passe derrière, là, elle crée une table temporaire en combinant les info des JOIN, puis sur cette table, elle applique le WHERE. Avec un WITH, elle appliquerait directement le filtre au moment de cette table temporaire. Donc mise à part des perfs différentes, je ne vois pas pourquoi ce que ça me ramène est également différent !
Je vous remercie de vos suggestions !