diff --git a/src/main/java/net/sf/jsqlparser/statement/select/Join.java b/src/main/java/net/sf/jsqlparser/statement/select/Join.java index 783ac22a8..042618f42 100644 --- a/src/main/java/net/sf/jsqlparser/statement/select/Join.java +++ b/src/main/java/net/sf/jsqlparser/statement/select/Join.java @@ -195,7 +195,7 @@ public String toString() { if (isSimple() && isOuter()) { return "OUTER " + rightItem; } else if (isSimple()) { - return "" + rightItem; + return ", " + rightItem; } else { String type = ""; diff --git a/src/main/java/net/sf/jsqlparser/statement/select/SubJoin.java b/src/main/java/net/sf/jsqlparser/statement/select/SubJoin.java index eebec8845..5ff0db323 100644 --- a/src/main/java/net/sf/jsqlparser/statement/select/SubJoin.java +++ b/src/main/java/net/sf/jsqlparser/statement/select/SubJoin.java @@ -65,7 +65,7 @@ public String toString() { StringBuilder sb = new StringBuilder(); sb.append("(").append(left); for (Join j : joinList) { - sb.append(" ").append(j); + sb.append(j.isSimple() ? "" : " ").append(j); } sb.append(")").append((alias != null) ? (" " + alias.toString()) : "").append((pivot != null) ? " " + pivot : ""); diff --git a/src/test/java/net/sf/jsqlparser/statement/select/SelectTest.java b/src/test/java/net/sf/jsqlparser/statement/select/SelectTest.java index 2dd405a8c..53fb50847 100644 --- a/src/test/java/net/sf/jsqlparser/statement/select/SelectTest.java +++ b/src/test/java/net/sf/jsqlparser/statement/select/SelectTest.java @@ -2009,6 +2009,12 @@ public void testWithStatement() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed(stmt); } + @Test + public void testSubjoinWithJoins() throws JSQLParserException { + String stmt = "SELECT COUNT(DISTINCT `webProduct`.`id`) FROM (`webProduct`, `base`, `protectedBase`)"; + assertSqlCanBeParsedAndDeparsed(stmt); + } + @Test public void testWithUnionProblem() throws JSQLParserException { String stmt = "WITH test AS ((SELECT mslink FROM tablea) UNION (SELECT mslink FROM tableb)) SELECT * FROM tablea WHERE mslink IN (SELECT mslink FROM test)";