【问题标题】:SQL Query Where Field DOES NOT Contain $x字段不包含 $x 的 SQL 查询
【发布时间】:2019-12-04 09:07:53
【问题描述】:

我想找到一个 SQL 查询来查找 field1 不包含 $x 的行。我该怎么做?

【问题讨论】:

  • 我可以使用 CONTAINS() 函数 (sql) 进行同样的检查吗?

标签: sql mysql


【解决方案1】:

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

【讨论】:

  • 什么是 x.b?你的信非常混乱。我建议使用表格或字段。
  • 如果您对NOT IN 使用子查询,请确保所有值都不会为NULL,如果您不熟悉三值逻辑,则为NOT IN and NULL do not combine in an obvious manner。在这里你可以使用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;
【解决方案2】:

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

编辑:NOT IN 做了一些不同的事情 - 你的问题并不完全清楚,所以选择使用哪一个。 LIKE 'xxx%' 可以使用索引。 LIKE '%xxx'LIKE '%xxx%' 不能。

【讨论】:

  • 什么被认为是正确转义?我知道使用普通字符串你只需要转义一些东西,但是 LIKE 有一些额外的特殊字符。
猜你喜欢
  • 1970-01-01
  • 2017-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-15
  • 1970-01-01
  • 1970-01-01
  • 2018-09-06
相关资源
最近更新 更多