selectioner les elements a qui sont associés à tous les elements b d'une liste

d0m
Mammouth du PHP | 1141 Messages

13 avr. 2008, 16:18

Bonjour,

j'ai un petit problème pour ecrire une requete SQL fonctionnant sous Access.

pour simplifier, je vais reduire ma base à un équivalent simple :

disons que j'ai :
- des arrets de bus dans une ville avec chacun un numéro.
- plusieurs bus ayant eux aussi chacun un numéro

chaque bus a son propre trajet desservant certains arrets.

j'ai donc 3 tables :
- table arrets comportant le numero de l'arret num_arret
- table bus comportant le numero du bus num_bus
- table dessert comportant le numero d'un bus et celui d'un arret

Code : Tout sélectionner

CREATE TABLE arrets num_arret int PRIMARY KEY CREATE TABLE bus num_bus int PRIMARY KEY CREATE TABLE dessert num_arret int num_bus int PRIMARY KEY (num_arret,num_bus)
Ce que je cherche à faire c'est, à partir d'une liste de numeros d'arret recueilli par une sous requete, obtenir les bus qui desservent TOUS ces arrets.

j'ai pensé à utiliser un count pour comparer le nombre des arrets recueillis avec celui des arrets de chaque bus contenu dans la liste des arrets recueillis.
c'est à dire :
- compter en sous requete le nombre des arrets de la liste

Code : Tout sélectionner

SELECT COUNT(*) FROM arrets WHERE num_arret IN (liste_arrets)
- compter pour chaque bus le nombre d'enregistrement

Code : Tout sélectionner

SELECT COUNT(*) FROM dessert WHERE num_arret IN(liste_arrets) GROUP BY num_bus
- renvoyer les numéro des bus ou les sommes sont egales. Mais je ne vois pas comment traduire cela en sql pour effectuer une requete qui fonctionne sous Access.

Un idée pour m'aider?

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

13 avr. 2008, 16:55

A priori tu devrais pouvoir utiliser ça :

Code : Tout sélectionner

SELECT num_bus, COUNT(*) AS cnt FROM dessert WHERE num_arret IN(liste_arrets) GROUP BY num_bus HAVING cnt = 123
...où "123" est le nombre d'arrêts dans le IN.