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

问题描述 投票:1回答:1

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

我有两个表,一个包含成员名称和他们的ID号。我们叫那个表名:

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

我的第二张表包含会议信息,其中有人是教练,有人是玩家。每个条目都是一个单独的行(即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) |
mysql database
1个回答
1
投票

这样的事情怎么样(http://sqlfiddle.com/#!9/53d3c/52/0):

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
© www.soinside.com 2019 - 2024. All rights reserved.