MySQL执行子查询报Every derived table must have its own alias问题咨询
错误原因
你收到的Every derived table must have its own alias报错是MySQL的强制语法要求:所有作为临时表出现在FROM、JOIN子句中的子查询(即派生表),必须显式设置唯一别名,供外层语句引用。
你的SQL中存在两处不符合要求的写法:
- 两个JOIN关联的子查询都没有设置别名
- 外层的SELECT字段、ON关联条件直接引用了子查询内部的表名
Game、GamePlaysPlayers,外层查询无法识别子查询内部的表名,只能通过派生表的别名调用字段
修复后的正确代码
select t1.GameID, t1.season as season_2008, t2.season as season_2018, t1.playerID from (select Game.GameID, Game.season, GamePlaysPlayers.playerID from Game inner join GamePlaysPlayers on Game.GameID = GamePlaysPlayers.GameID where Game.season = '20082009' ) t1 inner join ( select Game.GameID, Game.season, GamePlaysPlayers.playerID from Game inner join GamePlaysPlayers on Game.GameID = GamePlaysPlayers.GameID where Game.season = '20182019' ) t2 on t1.GameID = t2.GameID and t1.playerID = t2.playerID;
调整说明
- 给2008-2009赛季的子查询设置别名
t1,2018-2019赛季的子查询设置别名t2,符合派生表的语法要求 - 关联条件改为通过别名
t1、t2引用字段,同时增加了playerID的关联,避免相同GameID下不同球员的笛卡尔积问题,不需要关联playerID可自行删除该条件 - 赛季字段增加了别名区分,避免查询结果出现两个重名的season字段
内容的提问来源于stack exchange,提问作者Sindhu
相关产品推荐
相关产品推荐

