我的消息表包含两个字段,senderid
并且recipientid
. 我需要列出所有消息,但值的组合senderid
不需要recipientid
重复。
例如 ifsenderid = 4
和recipientid = 2
,我只需要这个的一个组合值;要么是 4,2,要么是 2,4。
任何人都可以帮助我这样做吗?
提前致谢 ;)
想法很简单,只需确保发送者/接收者 ID 以这样的方式连接,即较小的 ID 在较大的 ID 前面。
select
pair, count(*)
from
(select if(senderid<recipientid, concat(senderid, ',', recipientid), concat(recipientid,',',senderid)) as pair from messages) pairs
group by pair;
注意这种选择的表现。也许您想在插入记录时创建一个额外的列来存储对值,并为该列建立索引。
select
message,
case when senderid < recipientid then recipientid else senderid end,
case when senderid < recipientid then senderid else recipientid end
from m
group by
message,
case when senderid < recipientid then recipientid else senderid end,
case when senderid < recipientid then senderid else recipientid end
select *
from myTable a
where not exists
(
select top 1 1
from myTable b
where a.senderId = b.receiverId
and a.receiverId = b.senderId
and a.senderId < b.senderId
)