【问题标题】:Group by on multiple columns with inner join使用内部连接对多个列进行分组
【发布时间】:2017-11-14 09:30:27
【问题描述】:

我有以下数据库。

msg
....
 - uid (pk)
 - sender
 - msg

relation
---------
 - uid (fk)
 - reciever

一条消息可以发送给多个收件人,我希望收到所有收件人和发件人的唯一列表。问题是发件人也可以是收件人,所以我得到了重复。

一个例子是:

SELECT  msg.sender,relation.reciever,msg.msg,msg.uid from msg inner join relation on msg.uid = relation.uid group by msg.sender;


+-------------+-------------+-------+-----+
| sender      | reciever    | msg   | uid |
+-------------+-------------+-------+-----+
| 123         | 321         | Test1 | 1   |
| 321         | 123         | Test2 | 2   |
+-------------+-------------+-------+-----+

问题是现在存在重复。我想要其中一个,而不是发件人或收件人在任一领域都是唯一的。为此,我在组中添加了 msg.reciever,如下所示:

SELECT  msg.sender,relation.number,msg.msg,msg.uid from msg inner join
 relation on msg.uid = relation.uid group by msg.sender, relations.reciever;

但结果是一样的。我将如何完成跨两列生成独特结果的任务?

为了澄清,最终结果应该是:

+-------------+-------------+-------+-----+
| sender      | reciever    | msg   | uid |
+-------------+-------------+-------+-----+
| 123         | 321         | Test1 | 1   |
+-------------+-------------+-------+-----+

+-------------+-------------+-------+-----+
| sender      | reciever    | msg   | uid |
+-------------+-------------+-------+-----+
| 321         | 123         | Test2 | 2   |
+-------------+-------------+-------+-----+

【问题讨论】:

标签: mysql sql


【解决方案1】:

使用联合创建单个列来应用分组。

类似这样的:

select * from 
(
      SELECT  msg.sender as user, msg.msg,msg.uid from msg 
      inner join relation on msg.uid = relation.uid
   union
      SELECT  relation.reciever as user, msg.msg,msg.uid from msg 
      inner join relation on msg.uid = relation.uid
) Temp
group by user

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    • 2015-01-05
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多