Czy mogę użyć funkcji CONTAINS () (sql), aby dokonać tego samego sprawdzenia?
Kate,
Odpowiedzi:
291
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:
-- subquerySELECT a FROM x WHERE x.b NOTIN(SELECT b FROM y);-- predefined listSELECT a FROM x WHERE x.b NOTIN(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 NOTLIKE'%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 NOTLIKE'text%';
co to jest xb? twoje listy są bardzo zagmatwane. Zalecam użycie tabeli lub pola.
Whitecat
Upewnij się, że jeśli użyjesz podzapytania 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;
Bacon Bits
17
SELECT * FROM table WHERE field1 NOT LIKE '%$x%'; (Upewnij się, że wcześniej odpowiednio zmienisz wartość $ x, aby uniknąć wstrzyknięcia SQL)
Edycja: NOT INrobi 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ę.
Co jest uważane za właściwą ucieczkę? Wiem, że przy zwykłych napisach wystarczy uciec przed kilkoma rzeczami, ale LIKE ma kilka dodatkowych znaków specjalnych.
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:
Jeśli szukasz ciągu, przejdź do operatora LIKE (ale będzie to powolne):
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:
źródło
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'
alboLIKE '%xxx%'
nie mogę.źródło