我在下面的MYSQL中有sql代码并且我一直遇到错误:'每个派生表必须有自己的别名'。我已经尝试为每个表命名,但错误仍然存在。
select max(a1) - min(a1) from
(
(
select avg(av1) as a1
from
(
select avg(stars) as av1
from (rating r join movie m on r.mid=m.mid) as new1
where m.year < 1980
group by r.mid) as new2
) as new3
union
(
select avg(av2) as a1
from
(
select avg(stars) as av2
from (rating r join movie m on r.mid = m.mid
) as new4
where m.year>1980
group by r.mid
) as new5
) as new6
);
请原谅我,如果这对任何一个人来说都是一个非常愚蠢的问题。但是我已经坚持了几个小时这个问题了。请指出我做错了什么。感谢
答案 0 :(得分:1)
这是您的查询格式,以便我可以阅读:
select max(a1) - min(a1)
from ((select avg(av1) as a1
from (select avg(stars) as av1
from (rating r join
movie m
on r.mid=m.mid
) as new1
where m.year < 1980
group by r.mid
) as new2
) as new3
union
(select avg(av2) as a1
from (select avg(stars) as av2
from (rating r join
movie m on r.mid = m.mid
) as new4
where m.year>1980
group by r.mid
) as new5
) as new6
)
你最后需要一个别名。
顺便说一句,我认为new3
也不正确。 union
/ union all
中的子查询不带别名。