让我们假设下表:
| 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本身,也是可以的。
我试过这一次,但在“其他”-column中只有一行所有ids。
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 发布于 2015-06-07 15:51:30
您可以使用关联子查询:
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;注意:group是MySQL中的关键字和保留词,所以我希望它不是这个列的真实名称。
关联子查询似乎比left join和聚合更简单。有了mytable(group, id)上的索引,它也应该有相当好的性能。
https://stackoverflow.com/questions/30695475
复制相似问题