SQL-запрос, где поле не содержит $ x - PullRequest
110 голосов
/ 24 октября 2008

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

Ответы [ 2 ]

239 голосов
/ 24 октября 2008

Что это за поле? Оператор 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%';
15 голосов
/ 24 октября 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...