mysql - 使用内部连接对多列进行分组

标签 mysql sql

我有以下数据库。

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   |
+-------------+-------------+-------+-----+

最佳答案

使用联合创建单个列,在该列上应用分组依据。

像这样:

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

关于mysql - 使用内部连接对多列进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44507337/

相关文章:

javascript - 从 MySQL 数据库生成 JSON 结果,其中包含任务记录每天的记录总数?

mysql - 在 GROUP BY (MYSQL QUERY) 中包含空组

mysql - MySQL主从复制的可靠性

mysql - SQL Group By 对每个日期求和并使用最大日期

php - 多个内部连接在 PHP 中不起作用

mySQL 工作台 : Query to update table based on data in another table

php - 遍历文件夹中的 CSV 文件并使用 PHP 将数据加载到 MySQL

sql - 在 BigQuery SQL 中将 ARRAY<STRUCT> 转换为多列

mysql - 使用 MySQL 进行报告 - 最简单的查询花费的时间太长

sql - 更改 Django 查询中的字段名称