获取连接表的名称及别名,不支持复杂的子查询:
// 获取表及对应的别名
public void testParseAlias(){
Map<String,String> map = new HashMap<>();
String sql = "select *from A as a left join B b on a.bid = B.id left join C on A.cid = C.id and A.m = 3 left join D on B.did = D.id where a.id = 23 or b.id = 34 or c.id = 54";
try {
Select select = (Select)CCJSqlParserUtil.parse(sql);
SelectBody selectBody = select.getSelectBody();
PlainSelect plainSelect = (PlainSelect)selectBody;
Table table = (Table)plainSelect.getFromItem();
if(table.getAlias() != null){
map.put(table.getAlias().getName(),table.getName());
}
for(Join join : plainSelect.getJoins()){
Table table1 = (Table)join.getRightItem();
if(table1.getAlias()!=null){
map.put(table1.getAlias().getName(),table1.getName());
}
}
System.out.println(map);
}catch (Exception e){
e.printStackTrace();
}
}
输出结果为:
{a=A, b=B}