SQL: EJB QL, test collection dans Collection

Résolu/Fermé
Geraral Messages postés 7 Date d'inscription dimanche 1 février 2009 Statut Membre Dernière intervention 9 janvier 2011 - 29 nov. 2009 à 12:40
Geraral Messages postés 7 Date d'inscription dimanche 1 février 2009 Statut Membre Dernière intervention 9 janvier 2011 - 29 nov. 2009 à 14:50
Bonjour,

J'ai là un bon challenge, je cherche à faire une requête sql, ou plutôt OQL, donc en object. Elle doit me permettre de vérifier qu'une collection (que je génère à partir de données du client) fasse partie d'une autre collection de ma base, c'est à dire:

le client choisi 1 , 2 et 3
dans ma base, j'ai des lignes :
a. 1 2 3
b. 1 2 3 4
c. 2 3 4
d. 1 3 4

je ne souhaite que les ligne 'a' et 'b'. Bien entendu, ces lignes représentes un objet collection de l'objet global que je souhaite récupérer.

je suis sous EJB QL, et je me suis bien penché sur les ALL/EXISTS/IN etc, impossible de sortir ma requête correcte, là j'en suis à quelque chose comme ça:

strQuery = "SELECT distinct c FROM Candidature c, TypeCritere tpc where tpc.tpcId in (select t.tpcId from TypeCritere t WHERE t.tpcId = 3 OR t.tpcId = 2 OR t.tpcId = 1) and tpc.tpcId in (select typec.tpcId from in (c.critereCollection) as typec)";

--> les éléments clés de la recherche sont donc les tpcId.

Merci à tous ceux qui pourront contribuer.
A voir également:

1 réponse

Geraral Messages postés 7 Date d'inscription dimanche 1 février 2009 Statut Membre Dernière intervention 9 janvier 2011 1
29 nov. 2009 à 14:50
je viens de trouver une astuce pour faire marcher ma requête, si ça peut servir à d'autres:

en fait avec la requête:

SELECT distinct c FROM Candidature c, IN (c.critereCollection) AS tpc where tpc.tpcId = SOME (SELECT t.tpcId FROM TypeCritere t WHERE t.tpcId = 1 OR t.tpcId = 10 OR t.tpcId = 2 OR t.tpcId = 21 )


je récupére un paquet de ligne, bonne mais aussi mauvaise, par contre, il suffit de checker le nombre de résultats avec un groupb by et un having count, en sachant (par le code java) combien d'éléments on a recherché:

SELECT distinct c FROM Candidature c, IN (c.critereCollection) AS tpc where tpc.tpcId = SOME (SELECT t.tpcId FROM TypeCritere t WHERE t.tpcId = 1 OR t.tpcId = 10 OR t.tpcId = 2 OR t.tpcId = 21 ) GROUP BY c HAVING COUNT(c) = 4
1