根据冲突条件查找行

Finding rows based on Conflicting conditions

我有一个 table 充满邮件的消息,其中包含来自特定域的所有邮件。列是 - domain_name, subject and receipt。 我想在我的数据库中找到所有已发送 'welcome' 邮件和收据的域。

为了让邮件成为收据:

g.receipt != '{}'

为了使邮件成为 'Welcome' 邮件:

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

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

谢谢,我用mysql。

这应该会为您提供所需的结果。请注意,由于 table 是保留关键字,我将您的 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