在JSqlParser中使用SubJoin时?

时间:2018-01-20 08:34:26

标签: java jsqlparser

使用JSqlParser解析查询时,在某些情况下,似乎JSqlParser决定生成SubJoin对象作为FromItem,而不是常规的Table / Join对象。

你能帮我理解它何时发生?为什么?它们之间的主要区别是什么? 它与决定订单的括号有关吗?

获取解析器以创建SubJoin对象的示例:

SELECT 
    test
FROM
    ((tbl1
    LEFT JOIN tbl2 ON ((tbl1.id = tbl2.id)))
    LEFT JOIN tbl3 ON ((tbl1.id = tbl3.id)))

使库仅创建连接对象的示例:

SELECT 
    test
FROM
    tbl1
        LEFT JOIN
    tbl2 ON tbl1.id = tbl2.id
        LEFT JOIN
    tbl3 ON tbl1.id = tbl3.id;

1 个答案:

答案 0 :(得分:1)

如果你的部分中有括号,则会创建 SubJoin

FROM
    ((tbl1
    LEFT JOIN tbl2 ON ((tbl1.id = tbl2.id)))
    LEFT JOIN tbl3 ON ((tbl1.id = tbl3.id)))

您可以将 SubJoin 理解为更深层次的 fromItem + JoinExpression - contruct。所以 SubJoin 本身就是括号,如果你愿意的话。

如果你们都是游客,那么就应该没有问题。使用JSqlParser版本> 0.9,有访问者的适配器类,例如 ExpressionVisitorAdapter ,这是所需访问者的标准实现。