SQL查询其中字段不包含$ x


132

我想找到一个SQL查询来查找其中field1不包含$ x的行。我怎样才能做到这一点?


我可以使用CONTAINS()函数(sql)进行相同的检查吗?
凯特2012年

Answers:


291

这是什么领域?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%';

1
什么是XB?您的来信非常混乱。我建议使用表或字段。
2015年

确保使用子查询来NOT IN确保所有值都不为NULL,因为如果您不熟悉三值逻辑,则NOT IN和NULL不会以明显的方式组合。在这里您将使用SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL); 如果还需要排除NULL值,则需要执行以下操作:SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL) AND x.b IS NOT NULL;
培根钻头

17

SELECT * FROM table WHERE field1 NOT LIKE '%$x%'; (确保事先正确地转义了$ x以避免SQL注入)

编辑:NOT IN做了一些不同的事情-您的问题尚不清楚,因此请选择要使用的问题。 LIKE 'xxx%'可以使用索引。 LIKE '%xxx'LIKE '%xxx%'不能。


什么被认为是正确的转义?我知道使用普通的字符串您只需要转义一些内容,但是LIKE还有一些额外的特殊字符。
彼得·博斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.