我想找一个SQL查询来查找field1不包含$ x的行。我怎么能这样做?
答案 0 :(得分:238)
这是什么类型的领域? 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 :(得分:15)
SELECT * FROM table WHERE field1 NOT LIKE '%$x%';
(确保事先正确转义$ x以避免SQL注入)
编辑:NOT IN
做了一些不同的事情 - 你的问题并不完全清楚所以选择使用哪一个。 LIKE 'xxx%'
可以使用索引。 LIKE '%xxx'
或LIKE '%xxx%'
不能。