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