3

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

   (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. 上面的查询返回所有玩家的名字。我将很快添加一个搜索功能,您可以在其中搜索某个球员的所有比赛。是否有从结果中排除该球员(正如我们已经知道该球员在他被搜索时在比赛中)。所以几乎返回所有比赛,以及某个球员的其他球员,但从结果中排除实际搜索的球员。抱歉,如果不清楚,请告诉我,我将对此进行扩展。
4

1 回答 1

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

于 2012-05-25T14:07:25.013 回答