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 e80f49dcb6..bb10d22080 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 @@ -503,6 +503,24 @@ public class SelectStmt extends QueryStmt { } fromClause.setNeedToSql(needToSql); fromClause.analyze(analyzer); + + if (!isForbiddenMVRewrite()) { + Boolean haveMv = false; + for (TableRef tbl : fromClause) { + if (!tbl.haveDesc() || !(tbl.getTable() instanceof OlapTable)) { + continue; + } + OlapTable olapTable = (OlapTable) tbl.getTable(); + if (olapTable.getIndexIds().size() != 1) { + haveMv = true; + } + } + + if (!haveMv) { + forbiddenMVRewrite(); + } + } + // Generate !empty() predicates to filter out empty collections. // Skip this step when analyzing a WITH-clause because CollectionTableRefs // do not register collection slots in their parent in that context diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/TableRef.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/TableRef.java index b6c47e1cbf..e4b5caa446 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/TableRef.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/TableRef.java @@ -329,6 +329,10 @@ public class TableRef implements ParseNode, Writable { return tableSnapshot; } + public Boolean haveDesc() { + return desc != null; + } + /** * This method should only be called after the TableRef has been analyzed. */