mySQL - Select 2 列的任意顺序的不同组合
mySQL - Select Distinct combination of 2 columns in either order
我有一个 table,其中包含两个用户之间的消息。我需要找到所有不同的用户组合,无论他们是发送者还是接收者。
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'
我需要查询 return 这个:
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
只需在聚合中使用 least()
和 greatest()
:
select min(id) as id,
least(sender, receiver) as p1, greatest(sender, receiver) as p2,
min(message) as message
from messages
group by least(sender, receiver), greatest(sender, receiver);
我有一个 table,其中包含两个用户之间的消息。我需要找到所有不同的用户组合,无论他们是发送者还是接收者。
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'
我需要查询 return 这个:
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
只需在聚合中使用 least()
和 greatest()
:
select min(id) as id,
least(sender, receiver) as p1, greatest(sender, receiver) as p2,
min(message) as message
from messages
group by least(sender, receiver), greatest(sender, receiver);