JSqlParser中什么时候使用SubJoin?
When SubJoin is used in 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)))
您可以将 SubJoins 理解为层次更深的 fromItem + JoinExpression - 构造。所以 SubJoin 本身就是括号,如果你愿意的话。
Buf如果你都是访客,那应该没问题。使用 JSqlParser 版本 >0.9,有供访问者使用的适配器 类,例如ExpressionVisitorAdapter,这是所需访问者的标准实现。
使用 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)))
您可以将 SubJoins 理解为层次更深的 fromItem + JoinExpression - 构造。所以 SubJoin 本身就是括号,如果你愿意的话。
Buf如果你都是访客,那应该没问题。使用 JSqlParser 版本 >0.9,有供访问者使用的适配器 类,例如ExpressionVisitorAdapter,这是所需访问者的标准实现。