MySQL报错Every derived table must have its own alias 求解(NetBeans环境)
解决MySQL报错:Every derived table must have its own alias
嘿,这个报错我可太熟悉了!MySQL有个硬性要求:所有通过子查询生成的临时派生表,都必须给它起一个别名,不然数据库没法识别这个临时表,就会抛出这个错误。
结合你要统计唯一SONumbers对应的TotAmount总和的需求,我给你拆解问题并给出解决方案:
常见错误写法(触发报错的典型场景)
假设你之前的代码大概是这样的(没给子查询加别名):
SELECT SUM(TotAmount) FROM ( -- 子查询获取唯一的SONumber及其对应金额 SELECT DISTINCT SONumbers, TotAmount FROM your_table_name );
这里面的子查询生成了一个临时表,但没有别名,MySQL就会报错。
修正后的正确写法
只需要给子查询的临时表加一个别名(比如temp、so_data这类易懂的名字)就行:
SELECT SUM(temp.TotAmount) AS Total_Sum_Of_Unique_SO FROM ( SELECT DISTINCT SONumbers, TotAmount FROM your_table_name ) AS temp; -- 这里的AS可以省略,直接写) temp;也可以
进阶场景:如果同一个SONumber有多条记录
如果你的业务场景是同一个SONumber可能对应多条TotAmount记录,需要先按SONumber分组计算每个SO的总金额,再统计所有唯一SO的总和,那代码可以这么写(同样要给派生表加别名):
SELECT SUM(grouped.SO_Total) AS Grand_Total FROM ( SELECT SONumbers, SUM(TotAmount) AS SO_Total FROM your_table_name GROUP BY SONumbers -- 按SONumber分组,得到每个SO的总金额 ) AS grouped;
核心要点就是:只要你把子查询当成一个表来用,就必须给它起个名字,MySQL才能正确解析你的查询逻辑~
内容的提问来源于stack exchange,提问作者Nuwan Dissanayaka
相关产品推荐
相关产品推荐

