0

我的消息表包含两个字段,senderid并且recipientid. 我需要列出所有消息,但值的组合senderid不需要recipientid重复。

例如 ifsenderid = 4recipientid = 2,我只需要这个的一个组合值;要么是 4,2,要么是 2,4。

任何人都可以帮助我这样做吗?

提前致谢 ;)

4

3 回答 3

0

想法很简单,只需确保发送者/接收者 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;

注意这种选择的表现。也许您想在插入记录时创建一个额外的列来存储对值,并为该列建立索引。

于 2012-10-26T08:50:11.333 回答
0
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
于 2012-10-26T08:43:58.373 回答
0
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
)
于 2012-10-26T08:45:24.690 回答