我正在尝试读取从 MySql 查询创建的临时变量,如下所示:
String name = "";
selectQuery = "select (select "
+ "CONCAT(s.firstname,\" \",s.surname) "
+ "AS name) "
+ "from student s, marks m where m.grade = 'fail'";
try{
pstmt = con.prepareStatement(selectQuery);
rs = pstmt.executeQuery(selectQuery);
int count = 0;
while(rs.next()){
name = rs.getString("name");
System.out.println(++count+". "+name);
}
rs.close();
pstmt.close();
}catch(Exception e){
e.printStackTrace();
}
我收到 SQLException,因为未找到列“名称”。当我在 MySql 服务器中运行查询时,它运行良好。
最佳答案
为了应用别名,它必须位于嵌套查询括号外部,而不是内部。但是,您可以完全删除它并直接在选择列表中使用 concat
调用。
还有两个旁注:
- 隐式联接(即在
from
列表中放置多个表)已被弃用相当长一段时间。使用显式联接被认为是更好的做法。 - 无论您使用哪种连接语法,您都会缺少连接条件。
- 使用
concat_ws
而不是concat
可能会为您节省一些自行处理空白的麻烦。
长话短说:
select CONCAT_WS(' ', s.firstname, s.surname) AS name
FROM student s
JOIN marks m ON s.id = m.student_id
WHERE m.grade = 'fail'
关于java - 用于读取临时参数的PreparedStatement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48760684/