2008-10-24 151 views
88

我想查找SQL查詢來查找field1不包含$ x的行。我怎樣才能做到這一點?

+0

我可以使用C ONTAINS()函數(sql)進行相同的檢查? – Kate 2012-06-14 10:10:10

回答

193

這是什麼樣的領域? IN操作符不能用單一的領域使用,但意在子查詢或預定義的列表中使用:

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

如果您正在搜索的字符串,去LIKE操作符(但是這將是緩慢的) :

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

如果限制它,這樣你所搜索的字符串必須先從給定的字符串,它可以使用索引(如果在該領域中的指標),並相當快:

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

什麼是x.b?你的信件非常混亂。我建議使用表格或字段。 – Whitecat 2015-08-24 21:10:25

14

SELECT * FROM table WHERE field1 NOT LIKE '%$x%';(請確保您逃避$ X妥善事先避免SQL注入)

編輯:NOT IN做的東西有點不同 - 你的問題是不完全清楚,所以挑選使用哪一個。 LIKE 'xxx%'可以使用索引。 LIKE '%xxx'LIKE '%xxx%'不能。

+0

什麼被認爲是正確逃脫?我知道用普通字符串你只需要轉義一些東西,但LIKE有一些額外的特殊字符。 – 2012-05-16 15:01:47