【问题标题】:Executed subqueries in MySQLMySQL中执行的子查询
【发布时间】:2021-10-10 03:02:44
【问题描述】:

我正在运行以下查询

(
  select Game.GameID, Game.season, GamePlaysPlayers.playerID
  from (select Game.GameID, Game.season, GamePlaysPlayers.playerID
        from Game 
        inner join GamePlaysPlayers on Game.GameID = GamePlaysPlayers.GameID 
        where Game.season = '20082009'
       )
  inner join (
    select Game.GameID, Game.season, GamePlaysPlayers.playerID 
    from Game 
    inner join GamePlaysPlayers on Game.GameID = GamePlaysPlayers.GameID 
    where Game.season = '20182019'
  ) on Game.GameID = GamePlaysPlayers.GameID
);

我收到错误“每个派生表都必须有自己的别名”。

【问题讨论】:

    标签: mysql subquery


    【解决方案1】:

    错误信息很清楚。 如果您参考 MySQL 文档 https://dev.mysql.com/doc/refman/8.0/en/derived-tables.html,则每个派生表的名称都是强制性的,因此您必须在两个子查询中包含 AS 子句。 我猜第一个子查询的名称是“Game”,第二个子查询的名称是“GamePlaysPlayers”。

    【讨论】:

    • 感谢您的更新!我按照您的建议尝试了,这是我的以下代码。 select * from ( select Game.GameID, Game.season, GamePlaysPlayers.playerID from Game inner join GamePlaysPlayers on Game.GameID = GamePlaysPlayers.GameID where Game.season = '20082009' ) as T inner join ( select Game.GameID, Game.season, GamePlaysPlayers.playerID from Game inner join GamePlaysPlayers on Game.GameID = GamePlaysPlayers.GameID where Game.season = '20182019') as S on T.playerID = S.playerID; 但是我没有得到上述查询的任何结果。
    • 所以你在最初的问题中提到的错误是固定的。结果是否满足您的需求是另一个话题。根据我对您数据库的了解,您想提取参加 2008-2009 和 2018-2019 赛季的球员。你真的认为结果应该不同吗?
    • 是的,你是对的!我需要提取在2008/2009赛季打过比赛的球员也在2018/2019赛季打过比赛
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 2016-09-13
    • 2013-06-30
    相关资源
    最近更新 更多