首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有相关列id的分隔列表

问带有相关列id的分隔列表
EN

Stack Overflow用户
提问于 2015-06-07 15:45:37
回答 1查看 20关注 0票数 0

让我们假设下表:

代码语言:javascript
复制
| 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          |

如何才能查询到其他人属于同一组的信息?

我想得到这样的东西:

代码语言:javascript
复制
| 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。

代码语言:javascript
复制
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 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-07 15:51:30

您可以使用关联子查询:

代码语言:javascript
复制
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)上的索引,它也应该有相当好的性能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30695475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档