Відповіді:
Що це за поле? Оператор 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%';
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%'
не може.