错误代码1248:每个派生表必须有自己的别名 SQL报错咨询
解决MySQL错误1248:每个派生表必须有自己的别名
嘿,这个问题我太熟悉了!你碰到的错误代码1248,核心原因很简单:MySQL要求所有作为数据源的派生表(也就是你SQL里嵌套在括号里的子查询)必须有一个别名,不然数据库没法识别这个临时生成的数据集,自然就报错了。
原SQL的问题点
你写的这段SQL里,外层查询的数据源是一个子查询,但这个子查询没有被赋予任何别名:
SELECT dept_name,avg_salary FROM ( SELECT dept_name,AVG(salary) AS avg_salary FROM instructor group by dept_name ) -- 这里缺少派生表的别名! WHERE avg_salary>42000;
MySQL看到这个无别名的派生表时,不知道该怎么引用它,所以抛出了「每个派生表必须有自己的别名」的错误。
修正后的SQL写法
只需要给嵌套的子查询加一个合法的别名就行,比如dept_salary_summary或者更简单的temp,只要符合标识符规则都可以:
SELECT dept_name, avg_salary FROM ( SELECT dept_name, AVG(salary) AS avg_salary FROM instructor GROUP BY dept_name ) AS dept_salary_summary -- 给派生表添加别名 WHERE avg_salary > 42000;
更简洁的替代方案
其实你完全可以不用嵌套子查询,用HAVING子句直接在分组后过滤结果,这样代码更简洁,执行效率也更高:
SELECT dept_name, AVG(salary) AS avg_salary FROM instructor GROUP BY dept_name HAVING AVG(salary) > 42000;
HAVING是专门用来对GROUP BY后的分组结果进行过滤的,比嵌套子查询更符合SQL的语义,也更容易维护。
内容的提问来源于stack exchange,提问作者Arihant
相关产品推荐
相关产品推荐

