SQL将三个SELECT联接合并到一个表中
曲棍球应用程序。必须查询表2中的所有行,并显示球员姓名而不是球员ID *注意:新的堆栈溢出格式很抱歉SQL将三个SELECT联接合并到一个表中,sql,join,concat,Sql,Join,Concat,曲棍球应用程序。必须查询表2中的所有行,并显示球员姓名而不是球员ID *注意:新的堆栈溢出格式很抱歉 表1:球员 ╔═════════════════════╗ ║ id | fname | lname ║ ╠═════════════════════╣ ║ 1 | Jason | McFee ║ ║ 2 | John | Smith ║ ║ 3 | Jack | Doe ║ ╚═════════════════════╝ 表2:活动和目标 ╔════════════
表1:球员
╔═════════════════════╗
║ id | fname | lname ║
╠═════════════════════╣
║ 1 | Jason | McFee ║
║ 2 | John | Smith ║
║ 3 | Jack | Doe ║
╚═════════════════════╝
表2:活动和目标
╔═════════════════════════╗
║ id g_id a1_id a2_id ║
╠═════════════════════════╣
║ 1 1 2 3 ║
║ 2 3 1 2 ║
║ 3 2 1 3 ║
╚═════════════════════════╝
我试图做的是从事件和目标中获取每一行,并返回匹配的玩家名称 我想要完成的是:玩家的名字被执行了,我不需要名字旁边的(#)来引用玩家id 表3
╔════════════════════════════════════════════════╗
║ id goal assist1 assist2 ║
╠════════════════════════════════════════════════╣
║ 1 Jason McFee(1) John SMith(2) Jack Doe(3) ║
║ 2 Jack Doe(3) Jason McFee(1) John Smith(2) ║
║ 3 John Smith(2) Jason McFee(1) Jack Doe (3) ║
╚════════════════════════════════════════════════╝
我所做的
我尝试了一系列不同的查询,这是迄今为止最好的查询SELECT players.fname AS GFN,
players.lname AS GLN
FROM events_goals
LEFT JOIN players
ON events_goals.g_id = players.playerid
这将返回:
╔═══════════════╗
║ GFN GLN ║
╠═══════════════╣
║ Jason McFee ║
║ Jack Doe ║
║ John Smith ║
╚═══════════════╝
我可以为Assists1和assists2运行相同的代码,但我无法成功地将所有3个SELECT查询连接在一起,理想情况下,我希望将名字和姓氏列连接到一个单元格中,但我可以不使用它,主要的事情是将所有id转换为名称
JOIN
tableplayers
在tableevent\u goals
上三次,因为有三列依赖于players.id
SELECT a.ID,
CONCAT_WS(' ', b.fname, b.lname) goal,
CONCAT_WS(' ', c.fname, c.lname) assist1,
CONCAT_WS(' ', d.fname, d.lname) assist2
FROM event_goals a
INNER JOIN players b
ON a.g_id = b.id
INNER JOIN players c
ON a.a1_id = c.id
INNER JOIN players d
ON a.a2_id = d.id
ORDER BY a.id