Page 1 sur 1

compare des champs différents

Posté : 09 juil. 2008, 11:51
par pat
Bonjour,

Code : Tout sélectionner

CREATE TABLE `mail_faux` ( `id` int(100) NOT NULL auto_increment, `mail_faux` varchar(100) NOT NULL default '', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; -- -- Contenu de la table `mail_faux` -- INSERT INTO `mail_faux` VALUES (1, 'tata'); INSERT INTO `mail_faux` VALUES (2, 'titi');
J'ai 2 tables
mail et mail_faux

mail possede les champs id et mail
mail_faux possede les champs id et mail_faux

Je veux garder uniquement les mail qui ne sont pas commun au 2 tables
ex: mail contient toto; titi; tata; tutu et mail_faux contient titi; tata
je veux donc que ma requête me donne toto et tutu

voilà ce que j'ai ecrie

Code : Tout sélectionner

SELECT DISTINCT mail FROM mail, mail_faux WHERE mail.mail not like mail_faux.mail_faux
Mais ça ne marche pas j'ai aussi essayé avec <> mais ça ne marche pas non plus[/quote]

Posté : 09 juil. 2008, 12:45
par Vurtu

Code : Tout sélectionner

SELECT DISTINCT mail FROM mail WHERE mail NOT IN (SELECT mail_faux FROM mail_faux)
Ca devrait fonctionner :)

Posté : 09 juil. 2008, 12:50
par pat
Je te remercie ça fonctionne bien.
Par contre je ne comprend toujours pas pourquoi ma méthode ne fonctionne pas

Posté : 09 juil. 2008, 12:54
par Sékiltoyai
Réfléchis un peu, tu lui demandes tous les couples mail, mail_faux pour lesquels le mail est différent du mail_faux, ensuite pour chaque couple tu demandes le mail, et tu demandes qu'il soit unique. Evidemment qu'il va tout te renvoyer, vu que chaque mail appartiendra à moult couples.

Il faut que tu utilises NOT IN() par exemple (je crois qu'il y a aussi EXCEPT ou MINUS) :

Code : Tout sélectionner

SELECT ... FROM truc WHERE champ NOT IN(SELECT champ FROM truc2 WHERE blablabla);