Mysql 连接两个匹配多个ID的表';名字的缩写
在这里拉小提琴: 我有两个表,一个包含成员名称及其ID号。让我们将该表命名为: 我的第二个表包含会议信息,其中有人是教练,有人是球员。每个条目都是一个单独的行(即会议ID 1有两个条目,一个为教练,一个为参与者)。此外,还有一个列标识符,用于标识该行是否为教练或球员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
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