Aller au contenu

Requête sur 3 tables et EXISTS


Sujets conseillés

Posté

Bonsoir à tous,

J'ai actuellement besoin d'une grosse requête et cela dépasse mes compétences.

J'ai chercher sur Internet et j'ai trouvé la fonction exists.

Voila en gros ce que je dois faire :

- j'ai 3 tables : une avec des évènements, une autre avec les inscriptions aux évènements et la seconde avec les liens d'amitié.

- je dois donc recherche les évènements ou les inscrits sont amis entre eux, je ne sais pas si je suis clair mais bon.

Voici ce que j'ai pondu mais j'ai l'impression que le second exists n'est pas pris en compte.

SELECT * FROM evenements a WHERE EXISTS (SELECT * FROM evenements_inscrits b WHERE EXISTS (SELECT * FROM amis c WHERE c.id_client = b.id_client) AND b.id_evenement=a.id)

Qu'en pensez vous ?

Est ce une erreur, il y a t'il une autre méthode ?

Merci par avance.

Posté

A vue de nez :

SELECT a.* FROM evenements a, evenements_inscrits b, amis c
WHERE c.id_client = b.id_client AND b.id_evenement=a.id
GROUP BY a.id

Posté

Je dirais plutôt:


SELECT a.* FROM evenements e, evenements_inscrits ei1, evenements_inscrits ei2, amis a WHERE e.id = ei1.id_evenement AND e.id = ei2.id_evenement AND ei1.id_client=a.id_client1 AND ei2.id_client=a.id_client2

Non?

Jacques.

Posté (modifié)

Bonjour,

Merci à vous deux pour vos réponses.

Je penses que celle de Jacques se rapproche plus de ce que je veux faire car je dois mettre en place une boucle while et le group by ne correspondra pas à ma demande.

Une petite question pour Jacques : pourquoi dans la requete inséres tu deux fois la base evenements_inscrits avec evenements_inscrits ei1, evenements_inscrits ei2 ?

Cela correspond à la même chose non ?

Et à quoi correspond le SELECT a.* ? SI je vais SELECT * cela ira t il ?

UN grand merci par avance en tout cas, je vais tester cela de ce pas.

Aymeirc

Modifié par aodot
Posté

Encore une question sur la requête de Jacques.

Sachant que pour un évènement il y a plusieurs inscriptions de membres possibles est ce que la requète va prendre en compte la première inscription ou toutes ?

Merci par avance.

Posté

Si ce que tu veux c'est bien les événements pour lesquels il y a deux inscrits différents qui sont en plus des amis, il faut bien que tu aies un lien entre l'événement et le premier inscrit (ei1) et un lien entre l'événement et le deuxième inscrit (ei2), qui sont associés au même événement (e) et avec un lien entre les deux inscrits (a).

Et en fait je voulais dire e.* (si tu veux les détails de l'événement, mais que tu te moques des inscrits etc.), mais * ou une liste plus complète convient très bien. Note évidemment que comme tu as plusieurs tables qui ont des colonnes identiques avec * tu ne peux pas récupérer toutes les valeurs de ces colonnes (il faut que tu les spécifies explicitement en précisant un alias pour chaque colonne que tu veux).

La requête que j'indique donne toutes les combinaisons événement, inscrit1, inscrit2. Si tu veux une seule ligne par événement, un group by sera en effet nécessaire.

Jacques.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...