我有一个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%';
如果这是唯一的选择,那么我将不得不使用它,但我希望有其他的东西。
答案 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';