2010-10-17 6 views
0

J'essaye de rechercher une table où le champ name n'a pas une liste de chaînes dedans. J'utilise:MySQL NOT IN problème de requête

SELECT * 
FROM members 
WHERE name NOT IN ('bob', 'jim', 'leroy'); 

mais il renvoie toujours des correspondances contenant ces mots. J'ai cherché haut et bas pour la réponse à cela. Quelqu'un peut-il aider?

+1

pouvez-vous s'il vous plaît publier un ensemble de données contenant l'un des noms que vous souhaitez filtrer? – Simon

Répondre

3

name NOT IN ('bob', 'jim', 'leroy') est équivalent à name!='bob' and name!='jim' and name!='leroy'.

Peut-être que vous voulez

name not like '%bob%' and name not like '%jim%' and name not like '%leroy%' 

à la place?

+0

ouais mais je pensais qu'il y aurait un moyen plus efficace, peut-être pas –

+0

@Adam au sein de mysql Je pense que c'est aussi bon que ça. Si vous avez besoin d'améliorer les performances, consultez un moteur de recherche externe comme http://sphinxsearch.com. –

+0

MySQL a [fonctionnalité de recherche plein texte natif] (http://dev.mysql.com/doc/refman/5.0/fr/fulltext-search.html) –

1

Ceci ne correspond qu'à des valeurs qui sont exactement l'un des noms. Vous pouvez essayer WHERE name NOT LIKE "%bob%" AND NOT LIKE "%jim%" AND NOT LIKE "%leroy%"