包含相关列

时间:2015-06-07 15:45:38

标签: mysql sql

我们假设下表:

| 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 

1 个答案:

答案 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上的索引,它也应该具有相当不错的性能。