两列表示另一个表中的一个id

时间:2016-07-08 12:13:17

标签: mysql

我一直试图解决以下问题,但我无法理解它。

我需要将得分表中显示的玩家ID与人员表匹配,并返回相关人员的姓名。下面是表格的精简版本,显示了所需内容的核心部分。

详细信息将根据灯具ID返回,因此无论任何人的ID都在同一行,我需要获取他们的名字。

人员ID的格式为home_id_1,away_id_1,home_id_2和away_id_2。

  

人员表
  的 ID FNAME L-NAME
  1个弗雷德·布洛斯
  约翰二书布朗
  3凯文·史密斯
  4詹姆斯柯克

     

得分表
  的 Fixtures_ID home_id_1 away_id_1 home_id_2 away_id_2
  1 1 2 3 4

我当前的SELECT语句是:

SELECT scores.fixture_id, scores.match_date, players.fname, players.lname, 
       scores.home_id_1, scores.away_id_1, scores.home_id_2, scores.away_id_2  
    FROM scores, players  
    WHERE fixture_id = 1

输出应该是:

  

比赛日期 主场球员1 v 客场球员1, 主场球员2 v 客场球员2
  2016/01/10 Fred Bloggs John Brown Kevin Smith James Kirk

希望这是有道理的,非常感谢任何帮助。

谢谢,
丹。

2 个答案:

答案 0 :(得分:0)

尝试以下内容

SELECT scores.fixture_id, 
       scores.match_date, 
       CONCAT(p1.fname, p1.lname), 
       CONCAT(p2.fname, p2.lname),
       CONCAT(p3.fname, p3.lname),
       CONCAT(p4.fname, p4.lname),    
       s.home_id_1, 
       s.away_id_1, 
       s.home_id_2, 
       s.away_id_2
FROM scores s 
    INNER JOIN players p1 ON s.home_id_1 = p1.id
    INNER JOIN players p2 ON s.away_id_1 = p2.id
    INNER JOIN players p3 ON s.home_id_2 = p3.id
    INNER JOIN players p4 ON s.away_id_2 = p4.id
WHERE s.fixture_id = 1

如果您希望使用空值

,可能需要使用LEFT JOIN

答案 1 :(得分:0)

你需要加入到玩家桌面四次,每一列你想要与之匹配。像这样:

SELECT 
  scores.fixture_id, 
  scores.match_date, 
  players1.fname + ' ' + players1.lname,
  players2.fname + ' ' + players2.lname,
  players3.fname + ' ' + players3.lname,
  players4.fname + ' ' + players4.lname,
FROM 
  scores, 
  INNER JOIN players players1 ON scores.home_id_1 = players1.id
  INNER JOIN players players2 ON scores.home_id_2 = players2.id
  INNER JOIN players players3 ON scores.away_id_1 = players3.id
  INNER JOIN players players4 ON scores.away_id_2 = players4.id
WHERE
  scores.fixture_id = 1