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 0dc588fe92..8cf92cb2a9 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 @@ -157,10 +157,22 @@ public class SqlparserUtils { for (Join join : joins) { FromItem rightItem = join.getRightItem(); if (rightItem instanceof ParenthesedSelect) { - PlainSelect selectBody = ((ParenthesedSelect) rightItem).getPlainSelect(); - Select subSelectTmp = (Select) CCJSqlParserUtil.parse(removeVariables(selectBody.toString(), dsType)); - PlainSelect subPlainSelect = ((PlainSelect) subSelectTmp.getSelectBody()); - ((ParenthesedSelect) rightItem).setSelect(subPlainSelect); + try { + PlainSelect selectBody = ((ParenthesedSelect) rightItem).getPlainSelect(); + Select subSelectTmp = (Select) CCJSqlParserUtil.parse(removeVariables(selectBody.toString(), dsType)); + PlainSelect subPlainSelect = ((PlainSelect) subSelectTmp.getSelectBody()); + ((ParenthesedSelect) rightItem).setSelect(subPlainSelect); + }catch ( Exception e ){ + SetOperationList select = ((ParenthesedSelect) rightItem).getSetOperationList(); + SetOperationList setOperationList = new SetOperationList(); + setOperationList.setSelects(new ArrayList<>()); + setOperationList.setOperations(select.getOperations()); + for (Select selectSelect : select.getSelects()) { + Select subSelectTmp = (Select) CCJSqlParserUtil.parse(removeVariables(selectSelect.toString(), dsType)); + setOperationList.getSelects().add(subSelectTmp); + } + ((ParenthesedSelect) rightItem).setSelect(setOperationList); + } if (dsType.equals(DatasourceConfiguration.DatasourceType.oracle.getType())) { rightItem.setAlias(new Alias(rightItem.getAlias().toString(), false)); } else {