根据冲突条件查找行
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。
我有一个 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。