SQL-query waarbij veld GEEN $x bevat

Ik wil een SQL-query vinden om rijen te vinden waar veld1 geen $x bevat. Hoe kan ik dit doen?


Antwoord 1, autoriteit 100%

Wat voor soort veld is dit? De IN-operator kan niet worden gebruikt met een enkel veld, maar is bedoeld om te worden gebruikt in subquery’s of met vooraf gedefinieerde lijsten:

-- 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);

Als je een string zoekt, gebruik dan de LIKE-operator (maar dit zal traag zijn):

-- Finds all rows where a does not contain "text"
SELECT * FROM x WHERE x.a NOT LIKE '%text%';

Als je het beperkt zodat de string waarnaar je zoekt moet beginnen met de gegeven string, kan het indices gebruiken (als er een index op dat veld is) en redelijk snel zijn:

-- Finds all rows where a does not start with "text"
SELECT * FROM x WHERE x.a NOT LIKE 'text%';

Antwoord 2, autoriteit 6%

SELECT * FROM table WHERE field1 NOT LIKE '%$x%';(Zorg ervoor dat u $x vooraf correct escapet om SQL-injectie te voorkomen)

Bewerken: NOT INdoet iets anders – je vraag is niet helemaal duidelijk, dus kies welke je wilt gebruiken. LIKE 'xxx%'kan een index gebruiken. LIKE '%xxx'of LIKE '%xxx%'kan niet.

Other episodes