Mysql 跟踪对象上用户之间的交互

Mysql 跟踪对象上用户之间的交互,mysql,sql,Mysql,Sql,我有一个数据集,其中许多用户对一组工件进行了注释,我想知道用户直接/间接与之交互的每个其他用户。我想开发一个查询,它显示每个用户和每个其他用户对他们也参与的工件做出的贡献。我的数据看起来像这样 +----------+------+ | Artifact | User | +----------+------+ | 1 | a | | 1 | b | | 1 | c | | 1 | d | | 2 |

我有一个数据集,其中许多用户对一组工件进行了注释,我想知道用户直接/间接与之交互的每个其他用户。我想开发一个查询,它显示每个用户和每个其他用户对他们也参与的工件做出的贡献。我的数据看起来像这样

+----------+------+
| Artifact | User |
+----------+------+
|    1     |   a  |
|    1     |   b  |
|    1     |   c  |
|    1     |   d  |
|    2     |   a  |
|    2     |   m  |
+----------+------+
因此,在这种情况下,用户a与b、c、d&m进行了交互;b与a、c和d进行了互动;m与a进行了互动


理想情况下,它不会显示重叠(因此仅显示不同的值),但我可以在必要时清除这些重叠

您可以使用
GROUP\u CONCAT
函数:

SELECT 
    t1.User, GROUP_CONCAT(DISTINCT t2.User ORDER BY t2.User) 
FROM 
    test t1
    JOIN test t2 ON (t1.Artifact = t2.Artifact AND t1.User != t2.User)
GROUP BY t1.User

好的,这就是我想要的,谢谢!但实际上有太多的重叠,它并没有显示所有的关系,有没有一种方法也可以删除重复项(请注意我对示例代码的调整),在m&b有重复项的地方。在更新的查询中,我也更新了答案(添加:GROUP_CONCAT(DISTINCT…)