java - JSqlParser 何时使用 SubJoin?

标签 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;

最佳答案

如果 from - 部分中有括号,则会创建 SubJoin:

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

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

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

关于java - JSqlParser 何时使用 SubJoin?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48354092/

相关文章:

一台服务器中的 Java TCP 和 UDP 回显

java - Thymeleaf 复选框以及数据库中的对象列表

java - 使用 JSqlParser 查找 SQL 查询中标记的位置

java - 删除 JSqlParser 中的表达式

java - 如何使用JSqlParser向sql添加where条件?

java - 使用 Intellij 在 Java 中重构构造函数

java - 无法反序列化 START_OBJECT token 之外的实例

java - 使用 JUnit 4 的预期异常机制导致意外行为的原因?

java - jsql解析器中的PlainSelect和SetOperationList

java - JSQLParser 凝胶查询和子查询中的所有选择项