2008-10-24 4 views
88

Я хочу найти SQL-запрос для поиска строк, где field1 не содержит $ x. Как я могу это сделать?

+0

Могу ли я использовать C ONTAINS() (sql), чтобы сделать ту же проверку? – Kate 2012-06-14 10:10:10

ответ

193

Что это за поле? Оператор IN не может быть использован с одним полем, но предназначен для использования в подзапросов или с предопределенными списками:

-- subquery 
SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y); 
-- predefined list 
SELECT a FROM x WHERE x.b NOT IN (1, 2, 3, 6); 

Если вы ищете строку, идут для LIKE оператора (но это будет медленно) :

-- Finds all rows where a does not contain "text" 
SELECT * FROM x WHERE x.a NOT LIKE '%text%'; 

Если ограничить его так, чтобы строка, которую вы ищете должна начинаться с данной строкой, он может использовать индексы (если есть индекс по этому полю) и быть достаточно быстро:

-- Finds all rows where a does not start with "text" 
SELECT * FROM x WHERE x.a NOT LIKE 'text%'; 
+0

Что такое x.b? ваши письма очень сбивают с толку. Я рекомендую использовать таблицу или поле. – Whitecat 2015-08-24 21:10:25

14

SELECT * FROM table WHERE field1 NOT LIKE '%$x%'; (Убедитесь, что вы убегаете $ X правильно заранее, чтобы избежать инъекции SQL)

Edit: NOT IN делает что-то немного по-другому - Ваш вопрос не совсем ясно, так выбрать, какой из них использовать. LIKE 'xxx%' может использовать индекс. LIKE '%xxx' или LIKE '%xxx%' не может.

+0

Что считается правильным? Я знаю, что с обычными строками вы должны избегать нескольких вещей, но у LIKE есть дополнительные специальные символы. – 2012-05-16 15:01:47

Смежные вопросы