在MySQL中对不同行中同一列的值执行XOR运算

nhaq1z21  于 2022-11-28  发布在  Mysql
关注(0)|答案(1)|浏览(132)

我的查询应该返回特定人员的所有入站和出站消息的列表。我正在处理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)。

3gtaxfhh

3gtaxfhh1#

你的异或运算消除了发件人给自己的电子邮件。这是你真正需要的吗?
觉得你需要

group by m.messageid, t.email

而不是XOR

相关问题