MySQL中不同行中相同列的值的异或

MySQL中不同行中相同列的值的异或,mysql,sql,where-clause,xor,Mysql,Sql,Where Clause,Xor,我的查询应该返回特定人员的所有入站和出站消息的列表。我正在处理,在这个数据库中,同一条消息不能用不同的标签复制,例如«to»、«cc»、«bcc»,是的,这个数据库的格式不好 但是我想消除这种重复,例如,如果我收到带有标记«to»的消息,我不想看到相同的消息发送给带有标记«cc»的同一个人。天真的方法是尝试使用类似于XOR的东西,这将排除所有重复,但是当我应该在不同的行中比较同一列的值时,如何让它工作呢 目前的结果是: 而我只希望看到这两排中的一排 查询中使用的ERD类型和表的结构: 查询的代

我的查询应该返回特定人员的所有入站和出站消息的列表。我正在处理,在这个数据库中,同一条消息不能用不同的标签复制,例如«to»、«cc»、«bcc»,是的,这个数据库的格式不好

但是我想消除这种重复,例如,如果我收到带有标记«to»的消息,我不想看到相同的消息发送给带有标记«cc»的同一个人。天真的方法是尝试使用类似于XOR的东西,这将排除所有重复,但是当我应该在不同的行中比较同一列的值时,如何让它工作呢

目前的结果是: 而我只希望看到这两排中的一排

查询中使用的ERD类型和表的结构:

查询的代码:

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:一次用于入站消息(人员为t),另一次用于出站消息(人员为s)。请随意重新组织查询。

您的XOR将电子邮件从发件人发送给他自己。这是你真正需要的吗

我想你需要

group by m.messageid, t.email

代替XOR

请向我们展示表结构(创建表查询),您可以在这里或sqlfiddle.com上提供示例数据和预期结果吗?完整的示例数据:这是数据库的MySQL转储,因为您将其上载到MySQL,您可以执行我的查询或编写自己的查询。预期的结果是,当我看到与第一个屏幕截图中相同的消息时,除了«r.reciptype»的值外,其他值完全相同,该值可能会变化(到/cc/bcc),以仅显示这些«相同»字符串中的一个(第一个字符串)。