Page 1 sur 1

Selection de données non présentes dans une seconde table

Posté : 05 mai 2006, 08:07
par mike1155
Bonjour, voilà mon problème,
j'ai deux tables:
table1
id | nom
1 | alpha
2 | beta
3 | gamma
...

table 2
id | login
1 | ceci
1 | cela
2 | ceci

Je voudrais récupérer les id de la première table qui ne sont pas dans la seconde pour un login particulier

Par exemple, pour le login ceci, la requête devra renvoyer 3
poru le login cela, la requête devra renvoyer 2 et 3

Merci de votre aide

PS: il doit y avoir de la jointure de table mais je ne sais pas comment formuler cette "non-présence"

Posté : 05 mai 2006, 09:16
par zeus
Si tu disposes d'une version de MySQL > 4.1, tu peut utiliser les sous-requetes et l'operateur SQL NOT IN

Code : Tout sélectionner

SELECT t1.id, t1.nom FROM table1 t1 WHERE t1.id NOT IN ( SELECT t2.id FROM table2 t2 WHERE login LIKE 'ton_login')
Sinon, il faut que tu réalises 2 requetes : 1 pour obtenir la liste des identifiants dans la table2, que tu concatène ses identifiants en une chaine et que tu remplace la sous-requete dans mon exemple par cette liste d'identifiant

Posté : 05 mai 2006, 09:18
par Cobaye

Code : Tout sélectionner

SELECT table1.id FROM table1 LEFT JOIN table2 ON table1.id = table2.id WHERE table2.Id IS NULL AND login='ceci'
Voila j'ai pas vérifié mais c'est quelques choses comme ca

Posté : 06 mai 2006, 07:55
par mike1155
Merci beaucoup....je vais voir si je peux adapter cela à mon cas! Merci

Posté : 07 mai 2006, 21:02
par mike1155

Code : Tout sélectionner

SELECT table1.id FROM table1 LEFT JOIN table2 ON table1.id = table2.id WHERE table2.Id IS NULL AND login='ceci'
Voila j'ai pas vérifié mais c'est quelques choses comme ca
Voilà, après quelques tests, cela ne semble pas fonctionner!

Si j'enlève le AND login='ceci', j'ai bien les éléments dont l'id n'est pas dans la table2 mais il semblerait que la condition sur le login fausse la sélection...

Une petite piste? J'ai essayé les parenthèses sans succès!

Merci beaucoup

Posté : 08 mai 2006, 07:10
par mike1155

Code : Tout sélectionner

SELECT table1.id FROM table1 LEFT JOIN table2 ON table1.id = table2.id WHERE (table2.Id IS NULL AND login IS NULL) OR (table2.id=table1.id and ligin<>'ceci') OR (table2.id=table1.id AND login IS NULL)
Voilà, en rajoutant ces petites conditions, cela fonctionne!

Merci à tout ceux qui m'ont aidé sur ce problème