You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

复合主键SQL表中查询指定idLibro值全部行的异常问题

解决仅返回单条匹配行的问题

你的SQL查询语句SELECT emailUser FROM Prestar WHERE idLibro = 2;本身是正确的,理论上应该返回所有idLibro等于2的行。只拿到最后一行,问题基本出在你用来执行查询的程序代码逻辑上,而非SQL语句本身。

常见的排查和修正方向:

  • 检查程序是否只取了结果集的最后一条记录(比如误用了last()类方法,而非遍历整个结果集)
  • 确认是否在读取结果时,每次都用新值覆盖了存储变量,导致最终仅保留最后一行数据
  • 验证数据库内确实存在多条idLibro=2的记录(根据你提供的表数据,确实有符合条件的多行)

举个Java JDBC的错误示例(仅返回最后一行):

String sql = "SELECT emailUser FROM Prestar WHERE idLibro = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, 2);
ResultSet rs = pstmt.executeQuery();
String email = null;
while(rs.next()){
    // 每次循环覆盖变量,最终仅保留最后一行值
    email = rs.getString("emailUser");
}
System.out.println(email);

正确写法(收集所有匹配行):

String sql = "SELECT emailUser FROM Prestar WHERE idLibro = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, 2);
ResultSet rs = pstmt.executeQuery();
List<String> emails = new ArrayList<>();
while(rs.next()){
    emails.add(rs.getString("emailUser"));
}
// 遍历输出所有符合条件的结果
for(String e : emails){
    System.out.println(e);
}

如果使用Python、PHP等其他语言,核心逻辑一致:需要遍历整个结果集,将每一行数据收集到集合或数组中,而非仅提取最后一条记录。

内容的提问来源于stack exchange,提问作者user22741203

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 16:05:02