2008-10-24 155 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