根据冲突条件查找行

时间:2015-02-17 17:41:13

标签: mysql sql regex conditional-statements conflict

我有一个填充了邮件的表格,其中包含来自某些域名的所有邮件。列是 - domain_name, subject and receipt。 我想找到我的数据库中所有已经发送过“欢迎”邮件和收据的域名。

将邮件作为收据:

g.receipt != '{}'

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

g.subject regexp 'Welcome'
问题是这两个条件造成了冲突。我不能搜索他们两个因为我将得到0结果。单个邮件可以是欢迎 OR 收据。 但我需要找到那些通过时间发送的域名。

我所能做的就是通过这种方式缩小可能性:

   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。

1 个答案:

答案 0 :(得分:1)

这可以为您提供所需的结果。请注意,由于domains是保留关键字,我已将您的表table称为。

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