mysql - 替换 select 语句中的值

标签 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和参与者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;

关于mysql - 替换 select 语句中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52013029/

相关文章:

javascript - Express JS + Multer 文件上传前查询数据库

mysql - 如何只用一条sql语句创建一个view来达到这个目的呢?

php - 在 PHP 中获取 Mysql 行数

mysql - MySQL 中使用 GROUP BY 的子查询非常慢

mysql - 加入和过滤两组相同的表

mysql - 使用哈希时获取行的单个示例的有效方法

php - 将值作为函数的参数?

mysql - 从多个表中删除 id 不匹配的表

php - 将产品详细信息插入 'product' 表,并将产品图像插入 'image' 表

mysql - 当算术运算符存储在SQL数据库中时,如何在SQL查询中执行算术运算