我们假设下表:
| id | firstname | secondname | group |
|:-----------|------------:|:------------:|:------------:|
| 1 | Tom | Test1 | 111 |
| 2 | Jack | Test2 | 222 |
| 3 | Chris | Test3 | 333 |
| 4 | Lucy | Test4 | 333 |
| 5 | Joe | Test5 | 111 |
| 6 | John | Test6 | 111 |
如何获取包含信息的查询,其他人在同一组中?
我想得到这样的东西:
| id | firstname | secondname | group | others |
|:-----------|------------:|:------------:|:------------:|:------------:|
| 1 | Tom | Test1 | 111 | 5,6 |
| 2 | Jack | Test2 | 222 | |
| 3 | Chris | Test3 | 333 | 4 |
| 4 | Lucy | Test4 | 333 | 3 |
| 5 | Joe | Test5 | 111 | 1,6 |
| 6 | John | Test6 | 111 | 1,5 |
如果分隔的列表还包含相关的id本身,那也没关系。
我尝试了这个,但我只有一行包含“其他”中的所有ID - 列
Select A.id,A.firstname,A.secondname,A.group,GROUP_CONCAT(B.id) from myTable A
inner join myTable B
on (A.group = B.group)
where a.id <> b.id
答案 0 :(得分:1)
您可以使用相关子查询:
@developer.gserviceaccount.com
注意:select a.*,
(select group_concat(b.id)
from mytable b
where b.group = a.group and b.id <> a.id
) as OthersInGroup
from myTable a;
是MySQL中的关键字和保留字,所以我希望这不是该列的真实名称。
相关子查询似乎比group
和聚合更简单。使用left join
上的索引,它也应该具有相当不错的性能。