SQL-запит, де поле НЕ містить $ x


132

Я хочу знайти SQL-запит, щоб знайти рядки, де field1 не містить $ x. Як я можу це зробити?


Чи можу я використовувати функцію CONTAINS () (sql), щоб зробити ту ж перевірку?
Кейт

Відповіді:


291

Що це за поле? Оператор 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%';

1
що таке 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 має кілька додаткових символів.
Пітер Бос
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.