Aller au contenu

Demande de confirmation sur requête de type JOIN


Blix

Sujets conseillés

Salut à tous,

j'essaye de comprendre le fonctionnement d'une requête que j'ai trouvé sur le net et je pense l'avoir enfin compris. J'ai donc détaillé son fonctionnement et je voudrais que quelqu'un me dise si ma compréhension est bonne ou pas.

La requête me semble être de type JOIN implicite, elle prend en considération trois tables dans une base de données qui sert à cataloguer des photos et à les tagguer. Le schéma utilisé est (si j'ai bien compris !) en 3NF.

La table photos contient les photos, la table tags contient les différents tags utilisables et la table photos_tags contient quel(s) tag(s) est attribué à quelle(s) photo(s).

Voici la requête en question avec mes explications, ai-je bon ou pas ?

Elle devrait rechercher les photos qui se sont vues attribuer le tag "animal" ET "plante" (ok, pas très logique !). Dans la pratique elle fonctionne, mais je veux aussi comprendre la théorie.

SELECT p.*

//Affiche toutes les colonnes de la table p

FROM photos_tags pt, photos p, tags t

//La requête porte sur les tables photos_tags (alias pt), photos (alias p), tags (alias t)

WHERE pt.tag_id = t.tag_id

//Condition n°1 : toutes les lignes de pt et t qui ont le champ tag_id en commun

AND (t.name IN ('animal', 'plante'))

//Condition n°2 : parmi les lignes séléctionnées jusqu'ici, celles dont le champ name (table t) est égale à "animal" ou "plante"

AND p.photo_id = pt.photo_id

//Condition n°3 : parmi les lignes séléctionnées jusqu'ici, celle dont le champ photo_id des tables p et pt concordent

GROUP BY p.photo_id

//Parmi les résultats, on regroupe les lignes qui ont un id identique en une seule ligne...

HAVING COUNT( p.photo_id) = 2

//...à condition qu'il y en ait 2

Merci d'avance ! :)

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

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



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