Les Allergies
Alimentaires
Posez votre question Signaler

SQL: EJB QL, test collection dans Collection [Résolu]

Geraral 8Messages postés 1 février 2009Date d'inscription 9 janvier 2011Dernière intervention - Dernière réponse le 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.
Lire la suite 

SQL: EJB QL, test collection dans Collection »

1 réponses
Réponse
+1
moins plus
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
Ajouter un commentaire
Ce document intitulé « SQL: EJB QL, test collection dans Collection » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?