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:
cevap
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%';
x.b nedir? mektuplarınız çok kafa karıştırıcı. Tablo veya alan kullanmanızı tavsiye ederim. – Whitecat
"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; –
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.
Kaçış olarak kabul edilen nedir? Normal dizelerle sadece birkaç şeyden kaçmak zorunda olduğunuzu biliyorum, fakat LIKE'ın bazı ekstra özel karakterleri var. –
C kullanabilir miyim? Aynı kontrolü yapmak için ONTAINS() işlevi (sql)? – Kate