我想查找一个SQL查询,以查找field 1不包含$x的行。我该怎么做?
zbsbpyhn1#
这是什么领域?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%';
2skhul332#
SELECT * FROM table WHERE field1 NOT LIKE '%$x%';(确保事先正确转义$x以避免SQL注入)编辑:NOT IN做了一些不同的事情-你的问题不是很清楚,所以选择使用哪一个。LIKE 'xxx%'可以使用索引。LIKE '%xxx'或LIKE '%xxx%'不能。
SELECT * FROM table WHERE field1 NOT LIKE '%$x%';
NOT IN
LIKE 'xxx%'
LIKE '%xxx'
LIKE '%xxx%'
lg40wkob3#
替代方法:
SELECT * FROM x WHERE CHARINDEX('$x', field1, 0)<1
说明:它从位置0开始搜索'$x'的出现。并且只选择count“小于1”的地方。
3条答案
按热度按时间zbsbpyhn1#
这是什么领域?IN运算符不能与单个字段一起使用,而是用于子查询或预定义列表:
如果你正在搜索一个字符串,使用LIKE操作符(但这会很慢):
如果你限制它,使你搜索的字符串必须从给定的字符串开始,它可以使用索引(如果该字段上有索引),并且速度相当快:
2skhul332#
SELECT * FROM table WHERE field1 NOT LIKE '%$x%';
(确保事先正确转义$x以避免SQL注入)编辑:
NOT IN
做了一些不同的事情-你的问题不是很清楚,所以选择使用哪一个。LIKE 'xxx%'
可以使用索引。LIKE '%xxx'
或LIKE '%xxx%'
不能。lg40wkob3#
替代方法:
说明:它从位置0开始搜索'$x'的出现。并且只选择count“小于1”的地方。