Alanın $ x İçermediği SQL Sorgusu


133

Field1'in $ x içermediği satırları bulmak için bir SQL sorgusu bulmak istiyorum. Bunu nasıl yapabilirim?


Aynı kontrolü yapmak için CONTAINS () fonksiyonunu (sql) kullanabilir miyim?
Kate

Yanıtlar:


291

Bu ne tür bir alan? IN operatörü tek bir alanla kullanılamaz, ancak alt sorgularda veya önceden tanımlanmış listelerde kullanılması amaçlanmıştır:

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

Bir dizge arıyorsanız, LIKE işlecine gidin (ancak bu yavaş olacaktır):

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

Eğer aradığınız dizginin verilen dizge ile başlaması için onu kısıtlarsanız, dizinleri kullanabilir (bu alanda bir dizin varsa) ve makul derecede hızlı olabilir:

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

1
xb nedir? mektuplarınız çok çok kafa karıştırıcı. Tablo veya alan kullanmanızı tavsiye ederim.
Whitecat

Bunun için bir alt sorgu kullanırsanız NOT IN, değerlerin hiçbirinin NULL olmayacağından emin olun , çünkü üç değerli mantığa aşina değilseniz , NOT IN ve NULL açık bir şekilde birleşmez . Burada SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL); NULL değerleri hariç tutmanız gerekiyorsa, bunu yapmanız gerekir: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%'; (SQL enjeksiyonunu önlemek için önceden $ x değerini düzgün bir şekilde değiştirdiğinizden emin olun)

Düzenleme: NOT INbiraz farklı bir şey yapar - sorunuz tamamen net değildir, bu nedenle hangisini kullanacağınızı seçin. LIKE 'xxx%'bir dizin kullanabilir. LIKE '%xxx'ya LIKE '%xxx%'da yapamam.


Doğru şekilde kaçan nedir? Normal dizelerde yalnızca birkaç şeyden kaçmanız gerektiğini biliyorum, ancak LIKE'ın bazı ekstra özel karakterleri var.
Pieter Bos
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.