mysql - 根据冲突条件查找行

标签 mysql sql regex conditional-statements conflict

我有一个表格,里面装满了邮件消息,其中包含来自特定域的所有邮件。列是 - domain_name、subject 和 receipt。 我想在我的数据库中找到所有已发送“欢迎”邮件和收据的域。

为了让邮件成为收据:

g.receipt != '{}'

为了使邮件成为“欢迎”邮件:

g.subject regexp 'Welcome'

问题是这两个条件造成了冲突。我无法同时搜索它们,因为我将得到 0 个结果。一封邮件可以是欢迎收据。 但我需要找到在整个时间内都发送过的域。

我所能做的就是缩小可能性:

   select 
    *
from
    (select 
        if(g.receipt != '{}', @R:=1, @R:=0) As Receipt,
            if(g.subject regexp 'Welcome', @M:=1, @M:=0) AS Welcome,
            g.domain_name,
            g.subject,
            g.receipt
    from
        table as g
         ) as B
where
 (@M:= 1 and @R:=0) or (@R:=1 and @M:=0)
group by domain_name, Welcome, Receipt

此代码为我提供了所有发送“欢迎”或收据的域。 (我在数据库中有其他类型的消息)。有什么方法可以对此进行编码,这样我就不需要用眼睛找到它们了吗?

谢谢,我用的是mysql

最佳答案

这应该会为您提供所需的结果。请注意,由于 table 是保留关键字,我将您的表命名为 domains

select distinct domain_name from domains welcome_messages
where
    subject like '%Welcome%'
    and exists
    (
        select * from domains receipts
        where 
            receipts.receipt != '{}'
            and welcome_messages.domain_name = receipts.domain_name
    )

这是一个 sqlfiddle上面的脚本。

关于mysql - 根据冲突条件查找行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28567627/

相关文章:

java - 调用hashmap映射

javascript - 在javascript中检查html5模式正则表达式

正则表达式选择长度超过 4 个字符的单词,但如果重复则仅选择一个实例

php - 从 cakephp 中不同 Controller 的表中选择

c# - 在 asp.net 中使用 ID 仅更新一列

sql - 添加列值的 Case 语句

java - 正则表达式,接受错误的字符串

mysql - 数据适合行时的 VARCHAR 与 TEXT 性能

php - Laravel Eloquent Query 根据设定的条件查询多条记录

mysql - 或运算符不使用索引