如何同时使用LIKE与NOT LIKE正确筛选SQL查询结果
SQL筛选包含"Apple"但排除特定短语的问题
你的现有SQL语句会直接排除所有包含"Apple juice"或"Apple seed"的记录,这就是第四条数据被过滤掉的原因——它包含"Apple juice",但同时也存在独立的"Apple",符合你的预期需求却被错误排除。
要实现「包含Apple,且即使存在Apple juice/Apple seed,只要还有独立的Apple就保留」的逻辑,可以通过替换特定短语后检查剩余内容是否仍包含Apple的方式来实现:
SELECT content FROM description WHERE LOWER(content) LIKE '%apple%' AND LOWER(REPLACE(REPLACE(LOWER(content), 'apple juice', ''), 'apple seed', '')) LIKE '%apple%';
逻辑说明
- 第一个条件
LOWER(content) LIKE '%apple%'确保记录至少包含一次Apple(大小写不敏感)。 - 内层的
REPLACE会先把文本中的"apple juice"和"apple seed"(统一转小写后)替换为空字符串。 - 最后检查替换后的文本是否仍包含"apple":
- 第一条记录替换后仍有"apple is my favourite fruit",符合条件。
- 第二条记录替换后只剩" is delicious",无Apple,被排除。
- 第三条记录替换后只剩"s are black",无Apple,被排除。
- 第四条记录替换后剩" is made from apple",仍有Apple,符合条件。
这样就能得到你期望的第1条和第4条结果。
内容的提问来源于stack exchange,提问作者S.Dan
相关产品推荐
相关产品推荐

