Могу ли я использовать функцию CONTAINS () (sql) для такой же проверки?
Kate
Ответы:
291
Что это за поле? Оператор IN нельзя использовать с одним полем, он предназначен для использования в подзапросах или с предопределенными списками:
-- 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);
Если вы ищете строку, используйте оператор LIKE (но это будет медленным):
-- Finds all rows where a does not contain "text"SELECT*FROM x WHERE x.a NOTLIKE'%text%';
Если вы ограничите его так, чтобы строка, которую вы ищете, должна начинаться с данной строки, она может использовать индексы (если есть индекс в этом поле) и работать достаточно быстро:
-- Finds all rows where a does not start with "text"SELECT*FROM x WHERE x.a NOTLIKE'text%';
что такое xb? ваши письма очень сбивают с толку. Я рекомендую использовать таблицу или поле.
Whitecat
Убедитесь, что если вы используете для NOT INэтого подзапрос , ни одно из значений не будет NULL, поскольку NOT IN и NULL не объединяются очевидным образом, если вы не знакомы с трехзначной логикой. Здесь вы должны использовать SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL); Если вам также нужно исключить значения NULL, вам нужно будет сделать это: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%'; (Убедитесь, что вы правильно экранировали $ x заранее, чтобы избежать SQL-инъекции)
Изменить: NOT INделает что-то немного другое - ваш вопрос не совсем ясен, поэтому выберите, какой из них использовать. LIKE 'xxx%'можно использовать индекс. LIKE '%xxx'или LIKE '%xxx%'не могу.
Что считается правильным побегом? Я знаю, что с обычными строками вам нужно избежать всего нескольких вещей, но LIKE имеет некоторые дополнительные специальные символы.
Ответы:
Что это за поле? Оператор IN нельзя использовать с одним полем, он предназначен для использования в подзапросах или с предопределенными списками:
Если вы ищете строку, используйте оператор LIKE (но это будет медленным):
Если вы ограничите его так, чтобы строка, которую вы ищете, должна начинаться с данной строки, она может использовать индексы (если есть индекс в этом поле) и работать достаточно быстро:
источник
NOT IN
этого подзапрос , ни одно из значений не будет NULL, поскольку NOT IN и NULL не объединяются очевидным образом, если вы не знакомы с трехзначной логикой. Здесь вы должны использоватьSELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL);
Если вам также нужно исключить значения NULL, вам нужно будет сделать это: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%';
(Убедитесь, что вы правильно экранировали $ x заранее, чтобы избежать SQL-инъекции)Изменить:
NOT IN
делает что-то немного другое - ваш вопрос не совсем ясен, поэтому выберите, какой из них использовать.LIKE 'xxx%'
можно использовать индекс.LIKE '%xxx'
илиLIKE '%xxx%'
не могу.источник