一尘不染

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

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. 上面的查询返回所有玩家的姓名。我很快就会添加搜索功能,您可以在其中搜索特定玩家的所有比赛。无论如何,有没有从结果中排除该球员(看来我们已经知道该球员正在寻找中,所以在比赛中)。因此,几乎所有的比赛以及同一个球员的其他球员都将返回,但从结果中排除实际搜索到的球员。抱歉,如果不清楚,请告诉我,我会继续介绍。

阅读 159

收藏
2021-03-08

共1个答案

一尘不染

尝试类似以下的操作(假设字段名称)。它将显示玩家的姓名,比赛的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

2021-03-08