Puis-je utiliser la fonction CONTAINS () (sql) pour effectuer la même vérification?
Kate le
Réponses:
291
De quel genre de champ s'agit-il? L'opérateur IN ne peut pas être utilisé avec un seul champ, mais est destiné à être utilisé dans des sous-requêtes ou avec des listes prédéfinies:
-- subquerySELECT a FROM x WHERE x.b NOTIN(SELECT b FROM y);-- predefined listSELECT a FROM x WHERE x.b NOTIN(1,2,3,6);
Si vous recherchez une chaîne, optez pour l'opérateur LIKE (mais ce sera lent):
-- Finds all rows where a does not contain "text"SELECT*FROM x WHERE x.a NOTLIKE'%text%';
Si vous le restreignez afin que la chaîne que vous recherchez doive commencer par la chaîne donnée, il peut utiliser des indices (s'il y a un index sur ce champ) et être raisonnablement rapide:
-- Finds all rows where a does not start with "text"SELECT*FROM x WHERE x.a NOTLIKE'text%';
qu'est-ce que xb? vos lettres sont très déroutantes. Je recommande d'utiliser une table ou un champ.
Whitecat
Assurez-vous que si vous utilisez une sous-requête pour NOT INcela, aucune des valeurs ne sera NULL, car NOT IN et NULL ne se combinent pas de manière évidente si vous n'êtes pas familier avec la logique à trois valeurs. Ici, vous utiliserez SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL); Si vous devez également exclure les valeurs NULL, vous devez le faire:SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL) AND x.b IS NOT NULL;
Bacon Bits
17
SELECT * FROM table WHERE field1 NOT LIKE '%$x%'; (Assurez-vous de bien échapper $ x au préalable pour éviter l'injection SQL)
Edit: NOT INfait quelque chose d'un peu différent - votre question n'est pas totalement claire, alors choisissez celle à utiliser. LIKE 'xxx%'peut utiliser un index. LIKE '%xxx'ou LIKE '%xxx%'ne peut pas.
Qu'est-ce qui est considéré comme s'échapper correctement? Je sais qu'avec des chaînes normales, vous n'avez qu'à échapper à quelques éléments, mais LIKE a des caractères spéciaux supplémentaires.
Réponses:
De quel genre de champ s'agit-il? L'opérateur IN ne peut pas être utilisé avec un seul champ, mais est destiné à être utilisé dans des sous-requêtes ou avec des listes prédéfinies:
Si vous recherchez une chaîne, optez pour l'opérateur LIKE (mais ce sera lent):
Si vous le restreignez afin que la chaîne que vous recherchez doive commencer par la chaîne donnée, il peut utiliser des indices (s'il y a un index sur ce champ) et être raisonnablement rapide:
la source
NOT IN
cela, aucune des valeurs ne sera NULL, car NOT IN et NULL ne se combinent pas de manière évidente si vous n'êtes pas familier avec la logique à trois valeurs. Ici, vous utiliserezSELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL);
Si vous devez également exclure les valeurs NULL, vous devez le faire:SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL) AND x.b IS NOT NULL;
SELECT * FROM table WHERE field1 NOT LIKE '%$x%';
(Assurez-vous de bien échapper $ x au préalable pour éviter l'injection SQL)Edit:
NOT IN
fait quelque chose d'un peu différent - votre question n'est pas totalement claire, alors choisissez celle à utiliser.LIKE 'xxx%'
peut utiliser un index.LIKE '%xxx'
ouLIKE '%xxx%'
ne peut pas.la source