Mysql 连接两个匹配多个ID的表';名字的缩写

Mysql 连接两个匹配多个ID的表';名字的缩写,mysql,database,Mysql,Database,在这里拉小提琴: 我有两个表,一个包含成员名称及其ID号。让我们将该表命名为: 我的第二个表包含会议信息,其中有人是教练,有人是球员。每个条目都是一个单独的行(即会议ID 1有两个条目,一个为教练,一个为参与者)。此外,还有一个列标识符,用于标识该行是否为教练或球员 CREATE TABLE Meeting_Data ( Meeting_ID int, Player_ID int, Coach_ID int, field_id int ); INSERT INT

在这里拉小提琴:

我有两个表,一个包含成员名称及其ID号。让我们将该表命名为:

我的第二个表包含会议信息,其中有人是教练,有人是球员。每个条目都是一个单独的行(即会议ID 1有两个条目,一个为教练,一个为参与者)。此外,还有一个列标识符,用于标识该行是否为教练或球员

CREATE TABLE Meeting_Data (
    Meeting_ID int,
    Player_ID int,
    Coach_ID int,
    field_id int
);

INSERT INTO Meeting_Data
VALUES (1,0,11,2),
   (1,10,0,1),
   (2,34,0,1),
   (2,0,13,2),
   (3,98,0,1),
   (3,0,33,2),
   (4,78,0,1),
   (4,0,53,2)
;
我要做的是创建一个表,将每个会议放在一行上,然后将会议的ID和名称放在一起。当我尝试这样做时,我得到一列要成功拉取,然后得到一列(null)值

其结果是:

| Meeting_ID | Player_ID | Coach_ID | Player_Names | Coach_Names |
|------------|-----------|----------|--------------|-------------|
|          1 |        10 |       11 |          Deb |      (null) |
|          2 |        34 |       13 |        Steph |      (null) |
|          3 |        98 |       33 |        Peter |      (null) |
|          4 |        78 |       53 |    Christine |      (null) |

像这样的东西怎么样():


迈尔斯,你是个救生员!非常感谢。
SELECT Meeting_ID,
   Max(CASE 
         WHEN field_id = 1 THEN Player_ID 
       END) AS Player_ID,
   Max(CASE 
         WHEN field_id = 2 THEN Coach_ID 
       END) AS Coach_ID,
   Player_Names.Title as Player_Names,
   Coach_Names.Title as Coach_Names

FROM   Meeting_Data

LEFT JOIN Names Player_Names
ON Player_ID = Player_Names.ID

LEFT JOIN Names Coach_Names
ON Coach_ID = Coach_Names.ID

GROUP BY Meeting_ID
| Meeting_ID | Player_ID | Coach_ID | Player_Names | Coach_Names |
|------------|-----------|----------|--------------|-------------|
|          1 |        10 |       11 |          Deb |      (null) |
|          2 |        34 |       13 |        Steph |      (null) |
|          3 |        98 |       33 |        Peter |      (null) |
|          4 |        78 |       53 |    Christine |      (null) |
SELECT Meeting_ID, Player_ID, Coach_ID, Players.Title, Coaches.Title
FROM (
  SELECT Meeting_ID,
  MAX(Player_ID) as Player_ID,
  MAX(Coach_ID) as Coach_ID
  FROM   Meeting_Data
  GROUP BY Meeting_ID
) meeting
LEFT JOIN Names Players ON Players.ID = meeting.Player_ID
LEFT JOIN Names Coaches ON Coaches.ID = meeting.Coach_ID