Bonjour,
je fais du sql depuis des années mais je suis tombé sur un cas hier que je n'arrive pas à comprendre !
voici mon schéma qui met en relation des cétégories et des utilisateurs :
table : categorie (id_categorie, libellé) :
1, categ1
2, categ2
3, categ3
table : utilisateur_categorie (id_categorie, id_utilisateur) :
1, 1
1, 2
table : utilisateur (id_utilisateur, prénom)
1, jean
2, paul
Mon but est de faire une requête qui, pour toutes les catégories disponibles, me dit si l'utilisateur paul est associé à cette catégorie ou non.
Dans mon exemple, je souhaite donc obtenir le jeu suivant :
libelle catégorie, id_utilisateur
categ1, null
categ2, null
categ3, null
J'ai donc écrit la requête suivante :
Ce que je ne comprends pas, c'est que la requête ci-dessus me renvoie le jeu de résultat suivant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 SELECT c.libelle , u.id_utilisateur FROM categorie c LEFT JOIN utilisateur_categorie uc ON c.id_categorie = uc.id_categorie LEFT JOIN utilisateur u ON uc.id_utilisateur = u.id_utilisateur WHERE u.id_utilisateur = 2 OR u.id_utilisateur IS NULL
categ3, null
categ1 et categ2 n'apparaissent pas dans la sélection car il existe une entrée dans la table d'association mais qui ne correspond pas à l'utilisateur choisi. Pourtant, je pensais que le LEFT JOIN sélectionnait tous les éléments de la table à gauche du ON même sans correspondance dans la table de droite. Y'a un truc qui m'échappe mais je n'arrive pas à voir quoi...
Auriez-vous une piste ?
Merci de votre aide !
Partager