2008-10-24 12 views
88

Field1'in $ x içermediği satırları bulmak için bir SQL sorgusu bulmak istiyorum. Bunu nasıl yapabilirim? - Sorunuz bu yüzden hangisinin kullanılacağını seçmek tamamen açık değildir NOT IN biraz daha farklı bir şey yapar:

+0

C kullanabilir miyim? Aynı kontrolü yapmak için ONTAINS() işlevi (sql)? – Kate

cevap

193

Bu nasıl bir alan? IN operatörü tek alanla kullanılamaz, ancak alt sorgular veya önceden tanımlanmış listeleri ile kullanılabilir anlamına gelir: Bir dize arıyorsanız

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

, GİBİ operatör için gitmek (ama bu yavaş olacaktır)

: aradığınız dize verilen dize ile başlamak zorunda olduğu (o sahada bir dizin varsa), bu endeks kullanabilir ve oldukça hızlı olması bu yüzden

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

bunu kısıtlamak olursa

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

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

+0

"NOT IN" için bir alt sorgu kullandığınızda, değerlerin hiçbirinin NULL olmayacağından emin olun, çünkü [NOT IN ve NULL açık bir şekilde birleştirilmez] (https://stackoverflow.com/questions/129077/ üç değerli mantığı aşmıyorsanız, not-in-yan tümce ve null değerleri). Burada, 'SELECT a FROM x WHERE xb'YI SEÇMEYİN (SELECT b' YERİNİN B NEMİNDİ OLMADIĞINI BELİRTİNİZ); 'NULL değerleri de hariç tutmanız gerekiyorsa, şunu yapmanız gerekir:' 'BİR SELECT x XHERE xb DEĞİL (B ŞERİDEN YERİNİZ B NULL DEĞİLDİR) VE XB NULL DEĞİLDİR; –

14

SELECT * FROM table WHERE field1 NOT LIKE '%$x%';

Düzen (SQL enjeksiyonu önlemek için düzgün önceden $ x kaçış emin olun). LIKE 'xxx%' bir dizin kullanabilir. LIKE '%xxx' veya LIKE '%xxx%' yapamıyorum.

+0

Kaçış olarak kabul edilen nedir? Normal dizelerle sadece birkaç şeyden kaçmak zorunda olduğunuzu biliyorum, fakat LIKE'ın bazı ekstra özel karakterleri var. –