bonjour,

Cela fait longtemps que je n'ai plus trop touché de SQL (MySQL ici) et je bloque sur une requête pourtant relativement simple dans l'idée.
En effet, cela se présente comme suit.
Soit 3 tables :
Groupe(ID_Groupe, Libelle_groupe,...)
Abonne(Mail, Nom, ...)
Appartenir (Mail,ID_Groupe)

Le but est de chercher, pour un utilisateur donné, la liste des groupes dont il ne fait pas partie.

J'ai essayé de faire ceci :
Code :

SELECT DISTINCT Groupe.ID_Groupe FROM Groupe, Appartenir
    WHERE Groupe.ID_Groupe=Appartenir.ID_Groupe
    AND Mail = "unuser@adresse.fr"
    AND NOT EXISTS (SELECT * FROM Groupe);

J'ai également testé ceci :

SELECT *
FROM Groupe
LEFT OUTER JOIN Appartenir ON Groupe.`ID_Groupe` = Appartenir.ID_Groupe
WHERE Appartenir.Mail = "unuser@adresse.fr"
AND Appartenir.ID_Groupe IS NULL

Je me retrouve avec un résultat vide alors que j'attendais pour cet exemple "groupe 3" (l'abonné faisant partie du groupe 1 et groupe 2 dans mon petit jeu de tests)

Merci pour toute aide

3 réponses


yceoshda
Réponse acceptée

Bonjour,

Un truc dans le genre ...

select
   g.id_groupe
from 
    groupe g
where
    g.id_group not in (select a.id_groupe from apartenir a where a.mail = 'unuser@adresse.fr')

Attention par contre MySQL est tres lent sur les IN/NOT IN :-(

Peut tu nous présenter tes tables en entière s'il te plait ? Pour avoir une vue d'ensemble

Effectivement, j'ai procédé avec le Not In. J'ai compris où était mon erreur. Merci encore.