diff --git a/core/core-backend/src/main/java/io/dataease/commons/utils/SqlparserUtils.java b/core/core-backend/src/main/java/io/dataease/commons/utils/SqlparserUtils.java index c0be58252b..a9b557f713 100644 --- a/core/core-backend/src/main/java/io/dataease/commons/utils/SqlparserUtils.java +++ b/core/core-backend/src/main/java/io/dataease/commons/utils/SqlparserUtils.java @@ -280,6 +280,28 @@ public class SqlparserUtils { List joinsList = new ArrayList<>(); for (Join join : joins) { FromItem rightItem = join.getRightItem(); + Collection exprs = join.getOnExpressions(); + Collection exprs2 = new ArrayList<>(); + for (Expression expr : exprs) { + StringBuilder stringBuilder = new StringBuilder(); + BinaryExpression binaryExpression = null; + try { + binaryExpression = (BinaryExpression) expr; + } catch (Exception e) { + } + if (binaryExpression != null) { + boolean hasSubBinaryExpression = binaryExpression instanceof AndExpression || binaryExpression instanceof OrExpression; + if (!hasSubBinaryExpression && !(binaryExpression.getLeftExpression() instanceof BinaryExpression) && !(binaryExpression.getLeftExpression() instanceof InExpression) && (hasVariable(binaryExpression.getLeftExpression().toString()) || hasVariable(binaryExpression.getRightExpression().toString()))) { + stringBuilder.append(handleSubstitutedSql(binaryExpression.toString())); + } else { + expr.accept(getExpressionDeParser(stringBuilder)); + } + } else { + expr.accept(getExpressionDeParser(stringBuilder)); + } + exprs2.add(CCJSqlParserUtil.parseCondExpression(stringBuilder.toString())) ; + } + join.setOnExpressions(exprs2); if (rightItem instanceof ParenthesedSelect) { try { PlainSelect selectBody = ((ParenthesedSelect) rightItem).getPlainSelect();