在选择语句中替换值

时间:2018-08-25 00:11:10

标签: mysql

对不起,因为我觉得这是一个已经被问到的问题,但是我无法正确输入它的字词以找到符合我需要的结果。

我有这4张桌子:

参与者:

id     |     name
----------------------
1      |     Name1
2      |     Name2
3      |     Name3
4      |     Name4
5      |     Name5
6      |     Name6

事件:

id      |     participant1   |  participant2
----------------------------------------------
7       |     2              |    1
8       |     2              |    1
9       |     3              |    1
10      |     4              |    3
11      |     5              |    4
12      |     6              |    5

事件组:

id     |     groupId      |  eventId
----------------------------------------------
1      |     1            |    7
2      |     1            |    8
3      |     1            |    9
4      |     2            |    10
5      |     2            |    11
6      |     2            |    12

组:

id     |     name
----------------------
1      |     GroupName1
2      |     GroupName2

所以,到目前为止,我有这个:

Select * from EventGroups eg 
  join Groups g on eg.groupId = g.id
  join Events e on e.id = eg.eventId;

这是结果:

id |  groupId  |  eventId |   name        |  participant1   |  participant2
-----------------------------------------------------------------------------
1  |     1     |    7     |   GroupName1  |       2         |       1
2  |     1     |    8     |   GroupName1  |       2         |       1
3  |     1     |    9     |   GroupName1  |       3         |       1
4  |     2     |    10    |   GroupName2  |       4         |       3
5  |     2     |    11    |   GroupName2  |       5         |       4
6  |     2     |    12    |   GroupName2  |       6         |       5

所需的输出将是:

id |  groupId  |  eventId |   name        |  participant1   |  participant2
-----------------------------------------------------------------------------
1  |     1     |    7     |   GroupName1  |   Name2         |     Name1
2  |     1     |    8     |   GroupName1  |   Name2         |     Name1
3  |     1     |    9     |   GroupName1  |   Name3         |     Name1
4  |     2     |    10    |   GroupName2  |   Name4         |     Name3
5  |     2     |    11    |   GroupName2  |   Name5         |     Name4
6  |     2     |    12    |   GroupName2  |   Name6         |     Name5

我的意思是,用匹配表中的对应名称替换每一列中的参与者ID。

语言是Mysql。

有可能吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

只需联接参与者表两次,每个参与者一个,然后使用参与者1和参与者2作为匹配参与者名称的别名。

Select eg.id, eg.groupId, eg.EventId, g.name, p1.name as participant1, p2.name as participant2  from EventGroups eg 
  join Groups g on eg.groupId = g.id
  join Events e on e.id = eg.eventId
  join Participants p1 on p1.id = e.participant1
  join Participants p2 on p2.id = e.participant2;