diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/TransposeSemiJoinLogicalJoinProject.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/TransposeSemiJoinLogicalJoinProject.java index 37b3e027ff..783dca5f9d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/TransposeSemiJoinLogicalJoinProject.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/TransposeSemiJoinLogicalJoinProject.java @@ -76,7 +76,11 @@ public class TransposeSemiJoinLogicalJoinProject extends OneRewriteRuleFactory { * A B A C */ // RIGHT_OUTER_JOIN should be eliminated in rewrite phase - Preconditions.checkState(bottomJoin.getJoinType() != JoinType.RIGHT_OUTER_JOIN); + // TODO: when top join is ANTI JOIN, bottomJoin may be RIGHT_OUTER_JOIN + // Can we also do the transformation? + if (bottomJoin.getJoinType() == JoinType.RIGHT_OUTER_JOIN) { + return null; + } Plan newBottomSemiJoin = topSemiJoin.withChildren(a, c); Plan newTopJoin = bottomJoin.withChildren(newBottomSemiJoin, b); @@ -92,7 +96,11 @@ public class TransposeSemiJoinLogicalJoinProject extends OneRewriteRuleFactory { * A B B C */ // LEFT_OUTER_JOIN should be eliminated in rewrite phase - Preconditions.checkState(bottomJoin.getJoinType() != JoinType.LEFT_OUTER_JOIN); + // TODO: when top join is ANTI JOIN, bottomJoin may be RIGHT_OUTER_JOIN + // Can we also do the transformation? + if (bottomJoin.getJoinType() == JoinType.LEFT_OUTER_JOIN) { + return null; + } Plan newBottomSemiJoin = topSemiJoin.withChildren(b, c); Plan newTopJoin = bottomJoin.withChildren(a, newBottomSemiJoin);