对不起,因为我觉得这是一个已经被问到的问题,但是我无法正确输入它的字词以找到符合我需要的结果。
我有这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。
有可能吗?
谢谢!
答案 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;