我有一个表,其中包含两个用户之间的消息。我需要找到所有不同的用户组合,不管他们是发送者还是接收者。

ID    sender     receiver   message
1     'bob'      'bill'     'message 1'
2     'bill'     'bob'      'message 2'
3     'mike'     'bob'      'message 1'
4     'bob'      'bill'     'message 3'
5     'bob'      'mike'     'message 2'

我需要查询返回以下信息:
ID    sender     receiver   message
1     'bob'      'bill'     'message 1'
3     'mike'     'bob'      'message 1'

注意ID=2是如何被跳过的,因为Bob和Bill的组合已经找到(ID=4相同),ID=5被跳过,因为Bob和Mike的组合已经找到。

最佳答案

在子查询中提取所需的消息ID,然后将其与消息关联:

select a.*
from message a
join (
  select if(sender > receiver, sender, receiver) person1, if(sender > receiver, receiver, sender) person2, min(ID) ID
  from messages
  group by person1, person2) b on a.ID = b.ID

10-01 05:07
查看更多