具有链接到同一主键的多个外键的表(2)

时间:2012-05-25 14:05:28

标签: sql

为了扩展我之前的问题 - 我的数据库中有两个表,我想提取某些信息。表格如下:

   (player): player_id (primary), playerName
    (match): match_id (primary), playerID1, playerID2, playerID3, scorer etc..

您向我提供了以下代码以获取玩家的姓名:

SELECT p.Name 
FROM `match` m
INNER JOIN `player` p 
    ON p.player_id IN (m.playerID1, m.playerID2, m.playerID3) //etc

非常感谢 - 我只想进行两项调整:

  1. 我想返回得分手的名字以及球员名字。由于m.scorer是一个ID,如果p.Name已经映射到m.playerID,我该如何将它映射到p.Name属性?
  2. 以上查询返回所有玩家的名字。我很快就会添加一个搜索功能,您可以搜索特定播放器的所有匹配项。无论如何从结果中排除该球员(因为我们已经知道这名球员在比赛中被搜查了)。所以几乎返回所有比赛,以及特定球员的其他球员,但是从结果中排除实际搜索到的球员。对不起,如果不清楚,请告诉我,我会扩展它。

1 个答案:

答案 0 :(得分:3)

尝试以下内容(假设字段名称)。它会显示玩家的名字,匹配的matchId以及他们是否在该比赛中得分:)。

SELECT p.Name as 'Player Name', m.matchId as 'Match Id',
CASE s.scorerId WHEN ISNULL(S.SCORERID,0) THEN 'YES' ELSE 'NO' END as 'Scored?',
s.name as 'Scorer Name' --as requested from comment
FROM match m
INNER JOIN player p ON p.player_id IN (m.playerID1, m.playerID2, m.playerID3)
LEFT JOIN scorer s ON s.matchId = m.matchId
    AND s.player_id IN (m.playerID1, m.playerID2, m.playerID3)

请参阅此SQLFiddle HERE