【发布时间】:2019-03-04 15:42:26
【问题描述】:
我在一个数据库中有两个表。 Contacts 和 Filter
在Contacts 中,我有ID、Name 和Email 作为字段。
在Filter,我有ID 和code
我的目标是能够查询整个表并导出已按过滤器表中的项目过滤的列表。 (基本上与 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。 :)
第二阶段:我宁愿使用查询来确定要排除的项目(意思是如果它们中的任何一个匹配,则排除它们),而不是越来越大的查询......所以我会添加雅虎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)
有效.. 但只提取一条记录作为过滤器。并非所有这些都是过滤器。
【问题讨论】:
-
AND而不是OR。 -
您在 or 之后缺少字段名称,您需要为每个“不喜欢”指定一个字段 - 从电子邮件不喜欢 '%gmail%' 或电子邮件不喜欢'的联系人中选择不同的电子邮件%yahoo%'