如何在sqlite3的WHERE子句中添加多个“NOT LIKE'%?%'?

时间:2011-11-11 02:48:03

标签: sql sqlite

我有一个sqlite3查询,如:

SELECT word FROM table WHERE word NOT LIKE '%a%';

这将选择单词中不出现'a'的所有单词。这我可以完美地工作。问题是,如果我想进一步限制结果,不要在单词中的任何地方包含'b'。我正在想象这样的事情。

SELECT word FROM table WHERE word NOT IN ('%a%', '%b%', '%z%');

这显然不起作用,但这是个主意。只是添加一个AND子句就是我要避免的:

SELECT word FROM table WHERE word NOT LIKE '%a%' AND NOT LIKE '%b%';

如果这是唯一的选择,那么我将不得不使用它,但我希望有其他的东西。

7 个答案:

答案 0 :(得分:57)

SELECT word FROM table WHERE word NOT LIKE '%a%' 
AND word NOT LIKE '%b%' 
AND word NOT LIKE '%c%';

答案 1 :(得分:15)

如果您使用Sqlite的REGEXP支持(请参阅Problem with regexp python and sqlite的答案,了解如何执行此操作),那么您可以在一个子句中轻松完成:

SELECT word FROM table WHERE word NOT REGEXP '[abc]';

答案 2 :(得分:6)

你错过了第二个陈述:1)不喜欢A,2)不喜欢B

SELECT word FROM table WHERE word NOT LIKE '%a%' AND word NOT LIKE '%b%'

答案 3 :(得分:3)

您所追求的查询将是

SELECT word FROM table WHERE word NOT LIKE '%a%' AND word NOT LIKE '%b%'

答案 4 :(得分:2)

我不确定你为什么要避开 AND 条款。这是最简单的解决方案。

否则,您需要执行多个查询的 INTERSECT

SELECT word FROM table WHERE word NOT LIKE '%a%'
INTERSECT
SELECT word FROM table WHERE word NOT LIKE '%b%'
INTERSECT
SELECT word FROM table WHERE word NOT LIKE '%c%';

或者,如果您的SQL版本支持它,则可以使用正则表达式。

答案 5 :(得分:1)

如果你有任何问题"不喜欢"查询, 请考虑您在数据库中可能为null。在这种情况下,使用:

IFNULL(word, '') NOT LIKE '%something%'

答案 6 :(得分:1)

这是一个选择命令

   FROM
    user
WHERE
    application_key = 'dsfdsfdjsfdsf'
        AND email NOT LIKE '%applozic.com'
        AND email NOT LIKE '%gmail.com'
        AND email NOT LIKE '%kommunicate.io';

此更新命令

 UPDATE user
    SET email = null
    WHERE application_key='dsfdsfdjsfdsf' and  email not like '%applozic.com' 
    and email not like '%gmail.com'  and email not like '%kommunicate.io';