如何从非ansi连接语句的JSQLParser结果中提取连接条件?

How to extract join conditions from the JSQLParser result of an non-ansi join statement?

提问人:Xin Zhang 提问时间:11/17/2023 更新时间:11/17/2023 访问量:15

问:

我正在使用 JSQLParser 来解析一个 SQL 语句,该语句在传递给 JSQLParser 时是未知的实用程序。 如果查询包含非 ANSI 联接,则联接条件位于 WhereExpression 中,而不是 Join 中的 onExpressions。

例如,非 ANSI 联接语句的解析结果为SELECT * FROM a, b WHERE a.id = b.id

SQL Text
 └─Statements: net.sf.jsqlparser.statement.select.Select
    └─selectBody: net.sf.jsqlparser.statement.select.PlainSelect
       ├─ArrayList: [*]
       │  └─AllColumns: *
       ├─Table: a
       ├─ArrayList: [b]
       │  └─joins: net.sf.jsqlparser.statement.select.Join
       │     └─Table: b
       └─where: net.sf.jsqlparser.expression.operators.relational.EqualsTo
          ├─Column: a.id
          └─Column: b.id

而 的解析结果是SELECT * FROM a JOIN b ON a.id = b.id

SQL Text
 └─Statements: net.sf.jsqlparser.statement.select.Select
    └─selectBody: net.sf.jsqlparser.statement.select.PlainSelect
       ├─ArrayList: [*]
       │  └─AllColumns: *
       ├─Table: a
       └─ArrayList: [JOIN b ON a.id = b.id]
          └─joins: net.sf.jsqlparser.statement.select.Join
             ├─Table: b
             └─LinkedList: [a.id = b.id]
                └─onExpressions: net.sf.jsqlparser.expression.operators.relational.EqualsTo
                   ├─Column: a.id
                   └─Column: b.id

由于我的程序需要进一步的工作来处理连接条件,因此我需要从 whereExpression 中提取它们,如果语句中有非 ANSI 联接,则将它们添加回 onExpression。

是否有任何方法可以应用任何方法或规则来实现提取?

联接 sql-parser jsqlparser

评论


答: 暂无答案