如何在SQL中有多个NOT LIKE

问题描述 投票:0回答:5

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

Contacts,我有IDNameEmail作为领域。

Filter,我有IDcode

我的目标是能够查询整个表并导出已按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            [email protected]
joey           [email protected]

期望的输出

[email protected]

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

第二阶段:而不是拥有越来越大的查询,我宁愿使用查询确定要排除的项目(意味着如果它们中的任何一个匹配,那么将它们排除)..所以我会添加yahoo gmail protonmail到过滤器表的代码字段中的记录..就是这样

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

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

更新:

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

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

sql select where
5个回答
1
投票

您可以从下面的CHARINDEX中受益,我认为这会提高查询的性能。此外,你可以使用group by而不是distinct,它也将有助于性能。

select email 
from contacts 
where charindex('gmail',email) < 1 
  and charindex('yahoo',email) < 1
group by email

1
投票

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

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

0
投票

两个问题

您需要每个条件的列名称,因此在OR之后添加电子邮件

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

也许你想要在同一时间检查机器人,所以你需要AND

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

0
投票

正如其他人所说,使用NOT LIKE的正确布尔连接器是AND,而不是OR

你可能会看到使用NOT的逻辑:

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

-1
投票

如果您的选择有两个NOT ORKE标准通过OR条件连接,那么一切都符合标准。在这种情况下,“gmail”不像“yahoo”,“yahoo”不像“gmail”,所以即使是那两个也会通过标准。通过将select转换为使用AND条件,您可以捕获这些情况。语法要求您在两个条件中提供字段名称。我觉得这段代码易于阅读并满足您的需求。

SELECT distinct email 
FROM contacts 
WHERE email not like '%gmail%' 
   AND email not like '%yahoo%'
© www.soinside.com 2019 - 2024. All rights reserved.