gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:43:42 26 4
gpt4 key购买 nike

我想从查询和子查询中获取所有选择的项目

根据此链接,https://stackoverflow.com/a/30505741/8249665我可以从主查询中获取选定的项目。

对于这样的子查询 - “SELECT * FROM CUSTOMERS WHERE ID IN (SELECT ID FROM CUSTOMERS WHERE SALARY > 4500)”,我必须导航到 selectbody -> where -> rightItemList -> 再次选择body -> 最后项目。

此外,还可以有更多嵌套选择。如何在使用子查询/子查询和不使用子查询的情况下实现它?

最佳答案

这是您提到的链接的简单扩展。

为了遍历解析树,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);
}

关于java - JSQLParser 凝胶查询和子查询中的所有选择项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61225091/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com