将两个匹配多个ID的表连接到名称

时间:2017-12-21 17:56:30

标签: mysql database

在这里小提琴:http://sqlfiddle.com/#!9/53d3c/2/0

我有两个表,一个包含会员名称及其ID号。让我们调用该表 Names

CREATE TABLE Names (
    ID int,
    Title text
);

INSERT INTO Names
VALUES (11,'Chad'),
   (10,'Deb'),
   (34,'Steph'),
   (13,'Chris'),
   (98,'Peter'),
   (33,'Daniel'),
   (78,'Christine'),
   (53,'Yolanda')
;

我的第二个表包含会议信息,其中有人是 Coach ,有人是播放器。每个条目都是一个单独的行(即Meeting_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和名称放在一起。当我尝试这个时,我得到一列成功拉动,然后是一列(空)值。

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) |

1 个答案:

答案 0 :(得分:1)

这样的事情(Action Chains):

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