首页 > 解决方案 > 如何在 SQL 中有多个 NOT LIKE

问题描述

我在数据库中有两个表。ContactsFilter

Contacts中,我有IDNameEmail作为字段。

在 中Filter,我有ID并且code

我的目标是能够查询整个表并导出已按 Filter 表中的项目过滤的列表。(基本上与 grep -i -Ev 可以实现的相同)......基本上我想过滤掉 gmail 或 yahoo 或其他)。

所以如果我这样做

select distinct email from contacts where email not like '%gmail%'

一级过滤器起作用。但如果我这样做,

select distinct email from contacts where email not like '%gmail%' or not like '%yahoo%'

然后事情开始失败。

在我开始在过滤器中集成嵌套选择代码之前,我无法让多个 where 字段不像 X 或 field1 不像 Y 工作。

非常感谢任何输入。

样本数据

name           email 
bob            bob@gmail.com
joey           joey@cisco.com

期望的输出

joey@cisco.com

更新:谢谢大家的帮助。问题第一阶段的答案是从 OR 变为 AND。:)

第二阶段:而不是让查询越来越大,..我宁愿使用查询来确定要排除的项目(意思是如果它们中的任何一个匹配,则排除它们)..然后我会将 yahoo gmail protonmail 添加到过滤器表的代码字段中的记录..

select distinct email from contacts where email not like in (select code from filters)

这失败了,因为它说选择有多个记录

更新:

SELECT DISTINCT email FROM Contacts WHERE email NOT LIKE (select filters.code from filters where filters.id=4)

工作..但只拉一个记录作为过滤器。并非所有这些都是过滤器。

标签: sqlselectwhere

解决方案


您只需要使用 AND 而不是 OR。

SELECT distinct email 
FROM 
    contacts 
WHERE 
    email not like '%gmail%' 
    AND email not like '%yahoo%'

推荐阅读