diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/QueryStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/QueryStmt.java index ca79d02e387f0f..d0aa94177d160c 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/QueryStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/QueryStmt.java @@ -419,23 +419,20 @@ protected void substituteOrdinalsAliases(List exprs, String errorPrefix, // alias substitution is not performed in the same way. Expr substituteExpr = trySubstituteOrdinal(expr, errorPrefix, analyzer); if (substituteExpr == null) { - substituteExpr = expr.trySubstitute(aliasSMap, analyzer, false); if (aliasFirst) { substituteExpr = expr.trySubstitute(aliasSMap, analyzer, false); - i.set(substituteExpr); } else { try { // use col name from tableRefs first - expr.analyze(analyzer); + substituteExpr = expr.clone(); + substituteExpr.analyze(analyzer); } catch (AnalysisException ex) { // then consider alias name substituteExpr = expr.trySubstitute(aliasSMap, analyzer, false); - i.set(substituteExpr); } } - } else { - i.set(substituteExpr); } + i.set(substituteExpr); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java index fc4a82839c9939..7c952b5d41aae2 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java @@ -969,7 +969,14 @@ private void analyzeAggregation(Analyzer analyzer) throws AnalysisException { * (select min(k1) from table b where a.key=b.k2); * TODO: the a.key should be replaced by a.k1 instead of unknown column 'key' in 'a' */ - havingClauseAfterAnaylzed = havingClause.substitute(aliasSMap, analyzer, false); + try { + // use col name from tableRefs first + havingClauseAfterAnaylzed = havingClause.clone(); + havingClauseAfterAnaylzed.analyze(analyzer); + } catch (AnalysisException ex) { + // then consider alias name + havingClauseAfterAnaylzed = havingClause.substitute(aliasSMap, analyzer, false); + } havingClauseAfterAnaylzed = rewriteQueryExprByMvColumnExpr(havingClauseAfterAnaylzed, analyzer); havingClauseAfterAnaylzed.checkReturnsBool("HAVING clause", true); if (groupingInfo != null) { diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/QueryStmtTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/QueryStmtTest.java index e1dd1fe62f23b4..f7a4a8debce035 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/analysis/QueryStmtTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/QueryStmtTest.java @@ -246,7 +246,7 @@ public void testCollectExprs() throws Exception { stmt = (QueryStmt) UtFrameUtils.parseAndAnalyzeStmt(sql, ctx); exprsMap.clear(); stmt.collectExprs(exprsMap); - Assert.assertEquals(15, exprsMap.size()); + Assert.assertEquals(17, exprsMap.size()); constMap.clear(); constMap = getConstantExprMap(exprsMap, analyzer); Assert.assertEquals(4, constMap.size());