Odpowiedzi:
Co to za dziedzina? Operator IN nie może być używany z pojedynczym polem, ale ma być używany w podzapytaniach lub z predefiniowanymi listami:
-- 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);
Jeśli szukasz ciągu, przejdź do operatora LIKE (ale będzie to powolne):
-- Finds all rows where a does not contain "text"
SELECT * FROM x WHERE x.a NOT LIKE '%text%';
Jeśli ograniczysz to tak, że szukany ciąg musi zaczynać się od podanego ciągu, może używać indeksów (jeśli w tym polu jest indeks) i być w miarę szybki:
-- Finds all rows where a does not start with "text"
SELECT * FROM x WHERE x.a NOT LIKE 'text%';
NOT IN
, żadna z wartości nie będzie NULL, ponieważ NOT IN i NULL nie łączą się w oczywisty sposób, jeśli nie jesteś zaznajomiony z logiką trójwartościową. Tutaj możesz użyć SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL);
Jeśli musisz również wykluczyć wartości NULL, musisz to zrobić: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%';
(Upewnij się, że wcześniej odpowiednio zmienisz wartość $ x, aby uniknąć wstrzyknięcia SQL)
Edycja: NOT IN
robi coś innego - Twoje pytanie nie jest do końca jasne, więc wybierz, którego użyć. LIKE 'xxx%'
może używać indeksu. LIKE '%xxx'
albo LIKE '%xxx%'
nie mogę.