【问题标题】:Selecting various values from an event从事件中选择各种值
【发布时间】:2016-10-15 16:11:12
【问题描述】:

我有下面这 3 个表格,我想列出所有获得金牌的运动员

Athletes
    +------------+-----------------+
    | athletesID | athletesName    |
    +------------+-----------------+
    | jg         | justin gatlin   |
    | ms         | maria sharapova |
    | ub         | usain bolt      |
    | vw         | venus williams  |
    +------------+-----------------+

events
    +---------+-----------+---------------------+
    | eventID | eventName | athletes_athletesID |
    +---------+-----------+---------------------+
    | ev1     | tennis    | ms                  |
    | ev1     | tennis    | vw                  |
    | ev2     | mens 100m | jg                  |
    | ev2     | mens 100m | ub                  |
    +---------+-----------+---------------------+
results

    +-----------+--------+----------------+----------------------------+
    | resultsID | Medal  | events_eventID | events_athletes_athletesID |
    +-----------+--------+----------------+----------------------------+
    | results1  | silver | ev1            | ms                         |
    | results1  | Gold   | ev1            | vw                         |
    | results2  | silver | ev2            | jg                         |
    | results2  | Gold   | ev2            | ub                         |
    +-----------+--------+----------------+----------------------------+

到目前为止,我已经使用了下面的代码,但这列出了所有获得金牌的银牌获得者

SELECT 
    athletesID, athletesName, medal
FROM
    myoly.athletes
        JOIN
    myoly.events ON athletes.athletesID = events.athletes_athletesID
        JOIN
    myoly.results ON myoly.events.eventID = myoly.results.events_eventID
WHERE
    medal = 'gold';

如何列出所有仅获得金牌的运动员?

【问题讨论】:

    标签: mysql sql database database-design mysql-workbench


    【解决方案1】:
    SELECT 
        a.athletesID, 
        a.athletesName, 
        r.medal
    FROM results r
    LEFT JOIN athletes a
    ON a.athletesID  = r.events_athletes_athletesID 
    WHERE r.medal = 'Gold';
    

    【讨论】:

      【解决方案2】:

      如果您删除 WHERE medal = 'gold' 并查看结果,它应该会为您提供有关问题的线索。这通常是解决问题的最佳方法。

      无论如何,您需要在athleteID 上加入resultsathletes 而不是eventID。这是因为您关心的是哪些运动员获得了金牌,而不是哪些项目获得了金牌

      SELECT     a.athletesID, 
                 a.athletesName, 
                 r.medal
      FROM       athletes a
      INNER JOIN results r ON a.athletesID  = r.events_athletes_athletesID 
      WHERE      r.medal = 'Gold'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-24
        • 2016-11-06
        • 1970-01-01
        • 1970-01-01
        • 2012-07-09
        • 2015-02-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多