JSQLParser 凝胶查询和子查询中的所有 select 项
JSQLParser gel all select items from query and subquery
我想从查询和子查询中获取所有 select 项
按照这个 link, 我可以从主查询中得到 select 项。
对于这样的子查询 - "SELECT * FROM CUSTOMERS WHERE ID IN (SELECT ID FROM CUSTOMERS WHERE SALARY > 4500)
",我必须导航到 selectbody -> where -> rightItemList -> again selectbody -> finally items.
此外,还可以有更多的嵌套 select。如何使用 subquery/subqueries 和不使用子查询来实现它?
这是您提到的 link 的简单扩展。
遍历解析树JSqlParser提供了访问者模式。在这里,我重用了 TablesNamesFinder,它为您的目的使用了访问所有节点的完整实现。现在 不重要 你的 sql 嵌套有多深。对于覆盖方法的每次调用,您都会获得 SQL 的主要 SQL 或子选择。
public static void main(String args[]) throws JSQLParserException {
String sql = "SELECT * FROM CUSTOMERS WHERE ID IN (SELECT ID FROM CUSTOMERS WHERE SALARY > 4500)";
Select select = (Select) CCJSqlParserUtil.parse(sql);
TablesNamesFinder tablesNamesFinder = new TablesNamesFinder() {
@Override
public void visit(PlainSelect plainSelect) {
System.out.println("plainselect -> " + plainSelect.toString());
for (SelectItem item : plainSelect.getSelectItems()) {
System.out.println(item.toString());
}
super.visit(plainSelect);
}
};
tablesNamesFinder.getTableList(select);
}
我想从查询和子查询中获取所有 select 项
按照这个 link,
对于这样的子查询 - "SELECT * FROM CUSTOMERS WHERE ID IN (SELECT ID FROM CUSTOMERS WHERE SALARY > 4500)
",我必须导航到 selectbody -> where -> rightItemList -> again selectbody -> finally items.
此外,还可以有更多的嵌套 select。如何使用 subquery/subqueries 和不使用子查询来实现它?
这是您提到的 link 的简单扩展。
遍历解析树JSqlParser提供了访问者模式。在这里,我重用了 TablesNamesFinder,它为您的目的使用了访问所有节点的完整实现。现在 不重要 你的 sql 嵌套有多深。对于覆盖方法的每次调用,您都会获得 SQL 的主要 SQL 或子选择。
public static void main(String args[]) throws JSQLParserException {
String sql = "SELECT * FROM CUSTOMERS WHERE ID IN (SELECT ID FROM CUSTOMERS WHERE SALARY > 4500)";
Select select = (Select) CCJSqlParserUtil.parse(sql);
TablesNamesFinder tablesNamesFinder = new TablesNamesFinder() {
@Override
public void visit(PlainSelect plainSelect) {
System.out.println("plainselect -> " + plainSelect.toString());
for (SelectItem item : plainSelect.getSelectItems()) {
System.out.println(item.toString());
}
super.visit(plainSelect);
}
};
tablesNamesFinder.getTableList(select);
}