Я хочу найти SQL-запрос для поиска строк, где field1 не содержит $x. Как я могу это сделать?
SQL-запрос, где поле не содержит $x
Ответ 1
Что это за поле? Оператор 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%';
Ответ 2
SELECT * FROM table WHERE field1 NOT LIKE '%$x%';
(убедитесь, что вы избегаете $x правильно, чтобы избежать SQL-инъекции)
Изменить: NOT IN
делает что-то немного другое - ваш вопрос не совсем ясен, поэтому выберите, какой из них использовать. LIKE 'xxx%'
может использовать индекс. LIKE '%xxx'
или LIKE '%xxx%'
не может.