谁能帮我获取实际的列名及其别名ResultSetMetaData
class MysqlCon {
public static void main(String args[]) {
Connection con = null;
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
Statement stmt = con.createStatement();
String query = "SELECT \n" +
" RA_Min_1 AS 'ran Min',\n" +
" RA_Max_1 AS 'ran Max' \n" +
"FROM\n" +
" `Masters` m \n" +
" LEFT JOIN \n" +
" (SELECT \n" +
" mr.`Master_ID`,\n" +
" `RA_Min_1`,\n" +
" `RA_Max_1` \n" +
" FROM\n" +
" `Master_Attribute_Range` mr \n" +
" INNER JOIN `Masters` m \n" +
" ON m.`Master_Type_ID` = 3 \n" +
" AND mr.`Master_ID` = m.`Master_ID`) mar\n" +
" ON mar.Master_ID = m.`Master_ID` \n" +
" AND m.`Master_Type_ID` = 3 \n" +
"ORDER BY RA_min_1 \n" +
"LIMIT 0, 25 ";
ResultSet rs = stmt.executeQuery(query);
ResultSetMetaData rsm =rs.getMetaData();
for (int i = 1; i <= rsm.getColumnCount(); i++) {
System.out.println(rsm.getColumnLabel(i) + "--" + rsm.getColumnName(i));
}
} catch (Exception e) {
System.out.println(e);
} finally {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
输出
ran Min--ran Min
ran Max--ran Max
在这里,如果我删除ORDER BY RA_min_1子句,那么它将返回预期的输出:
ran Min--RA_Min_1
ran Max--RA_Max_1
更新
首先很抱歉,由于我遇到了一些个人问题,因此无法回复,并且由于这些问题,我无法查看堆栈溢出。请原谅我。谢谢。
没有子查询的普通查询将按预期给出结果。但我有一种情况,我必须使用子查询并且需要别名和实际字段名。
在这里提出问题,我已经截断了只有一个字段的子查询,但在实际场景中,LEFT JOIN 之后的子查询非常大并且包含许多列,例如RA_Min_1, RA_Max_1,RA_Min_2, RA_Max_2,...RA_Min_50, RA_Max_50 and some other columns.
我们正在准备动态查询,其中有时我们有RA_Min_1, RA_Max_1,有时RA_Min_2, RA_Max_2。
所以,我在这里寻找带有子查询的解决方案。
任何帮助将不胜感激!!
谢谢。