Bonjour,
Je fais appel à votre expérience pour savoir comment structurer au mieux ma requête SQL.
Considerons 2 objets : Entreprise et Employe. Une entreprise contient plusieurs employes.
Je veux pouvoir recuperer une grappe d'objets Entreprise avec tous ses employés à l'aide de critères portant à la fois sur les entreprises et sur les employes
Mes objets
Pour simplifier le problème, disons qu'une Entreprise est entierement caractérisée par sa taille et qu'un Employe est entierement caractérisé par son âge
Mes tables
ENTREPRISE contient une TAILLE et un ID
EMPLOYE contient un AGE, et un ID_ENTREPRISE
Mon critère de recherche
Je veux récupérer une entreprise de taille >T et dont au moins un employe a un âge > A
Un exemple
Entreprise E1 : 3 employes
Employe A: 30 ans
Employe B: 40 ans
Employe C: 50 ans
Entreprise E2 : 3 employes
Employe D: 25 ans
Employe E: 28 ans
Employe F: 45 ans
Pour une recherche d'une entreprise de taille 3 avec un employe > 40 ans, je veux recuperer la grappe complete E1 + E2(Entreprises + TOUS leurs employes, meme ceux dont l'âge ne matche pas)-> 6 Rows.
Pour une recherche d'une entreprise de taille 4 avec un employe > 30 ans, je ne veux rien récupérer (parce que la taille de l'entreprise ne matche pas)
La difficulté est qu'il me semble qu'il faille faire la requête en deux temps:
-d'abord, récupérer la liste des ID_ENTREPRISE concernés
-ensuite, récupérer la liste des employés concernés par ces ID_ENTREPRISE
Autre difficulté:
-Ma vraie table contient en fait des critères plus complexes (dont plusieurs clauses LIKE, c'est gourmand?)
-Ma vraie table contiendra des millions d'entrées, il me faut donc vraiment optimiser ma recherche. Je voudrais donc filtrer un max avant de faire un join entre ma table ENTREPRISE et ma table EMPLOYE. (c'est possible de mettre une clause WHERE dans un JOIN?)
Message édité par liouan le 12-04-2010 à 10:34:24