带有 NOT LIKE IN WHERE CLAUSE 的 Sql 查询

Posted

技术标签:

【中文标题】带有 NOT LIKE IN WHERE CLAUSE 的 Sql 查询【英文标题】:Sql Query with NOT LIKE IN WHERE CLAUSE 【发布时间】:2022-01-21 05:04:45 【问题描述】:

我有两个表 emailsblockedSender 我正在尝试从电子邮件查询中删除被阻止的发件人。例如

电子邮件表:

user_id from_address
1 name-1 <email-1@address.com>
2 name-2 <email-2@address.com>

blockedSender 表:

blocked_address
email-1@address.com

在这里,我想从电子邮件表中返回 from_address 不与被阻止地址中的条目进行 LIKE 匹配的所有元素。类似于

select email_id, from_address 
from emails e 
where from_address not like in (select '%' + blocked_address + '%' 
                                from blockSenders)

由于语法不正确,它不起作用。有没有办法做到这一点?

【问题讨论】:

【参考方案1】:

你可以用不存在

来表达
select e.email_id, e.from_address
from emails e 
where not exists (
    select * from blockedSenders b 
    where e.from_address like '%' + b.blocked_address + '%'
)

【讨论】:

【参考方案2】:

可以改写为JOIN:

select e.email_id, e.from_address 
from emails e
left join blockSenders b
  ON e.from_address LIKE '%' + b.blocked_address + '%' 
where b.blocked_address IS NULL;

db<>fiddle demo

【讨论】:

以上是关于带有 NOT LIKE IN WHERE CLAUSE 的 Sql 查询的主要内容,如果未能解决你的问题,请参考以下文章

带有和不带有聚合的 sql 查询

如何翻转正面带有标签而背面带有另一个标签的视图 - 参见图片

CakePHP 如何处理带有/不带有 'id' 字段的 HABTM 表?

带有滚动的 Div 和带有绝对位置的内容

带有 RecyclerView 的 DialogFragment 比带有 Recyclerview 的 Fragment 慢

访问控制允许带有和不带有 www 的来源