我的查询应该返回特定人员的所有入站和出站消息的列表。我正在处理Enron Email Dataset in MySQL,在这个数据库中,同一条消息不能用不同的标签重复,例如 * to , cc , bcc ,是的,这个数据库不是很好的ACID格式。
但是我想消除这种重复,例如,如果我收到了带有标签 * to * 的消息,我不想看到同样的消息被发送给带有标签 * cc * 的同一个人。天真的方法是尝试使用类似XOR*的东西,这将排除所有重复,但当我需要比较不同行中同一列的值时,如何让它工作呢?
当前结果为:
虽然我希望只看到这两行中的一行。
查询中使用的实体关系图的种类、表的结构:
查询的代码:
SELECT
left(m.messagedt, 10) AS 'date',
m.messageid AS 'message id',
r.reciptype AS 'type',
m.subject AS 'message subject',
b.body AS 'message body',
s.personid AS 'sender id',
s.name AS 'sender',
s.email AS 'sender email',
t.personid AS 'receiver id',
t.name AS 'receiver',
t.email AS 'receiver email'
FROM messages AS m
JOIN bodies AS b
ON b.messageid = m.messageid
JOIN recipients AS r
ON r.messageid = m.messageid
JOIN people AS t
ON t.personid = r.personid
JOIN people AS s
ON s.personid = m.senderid
WHERE (
s.email = 'lisa.jones@enron.com'
XOR
t.email = 'lisa.jones@enron.com'
)
ORDER BY m.messagedt,
m.messageid;
我要强调的是,查询的目的是获得所有消息的列表,这些消息已经发送给特定用户或来自特定用户。这就是为什么我使用了***JOIN***两次:一个用于入站消息(people as t),一个用于出站消息(people as s)。
1条答案
按热度按时间3gtaxfhh1#
你的异或运算消除了发件人给自己的电子邮件。这是你真正需要的吗?
觉得你需要
而不是XOR