mysql - [21000][1242] 子查询返回多于 1 行
问题描述
我的查询:
entityManager.createQuery("SELECT " +
"q.id, " +
"q.title, " +
"q.user.fullName, " +
"q.user.reputationCount, " +
"q.viewCount, " +
"q.countValuable, " +
"q.persistDateTime, " +
"t.id, " +
"t.name, " +
"t.description, " +
"(SELECT COUNT (a) FROM Answer a WHERE a.question.id = q.id), " +
"(SELECT a.isHelpful FROM Answer a WHERE a.question.id = q.id) " +
"FROM Question q JOIN q.tags t")
在这里我得到错误 - [21000][1242] 子查询返回超过 1 行
通过异常的方法,我确定了这个查询字符串中的错误:
"(SELECT a.isHelpful FROM Answer a WHERE a.question.id = q.id) "
如何提出正确的请求,以免出现此错误?感谢!
解决方案
子查询返回超过 1 行,这仅仅意味着您的查询没有返回单行以使外部选择语句起作用。
"(SELECT a.isHelpful FROM Answer a WHERE a.question.id = q.id) "
您必须应用一组条件来唯一地过滤掉您的数据,或者使用连接来组合您的表格答案和问题,然后相应地过滤数据。
您还可以通过 GROUP_CONCAT Mysql 函数将每一行数据分组在一列中,如下所示:
"(SELECT GROUP_CONCAT(a.isHelpful) FROM Answer a WHERE a.question.id = q.id) "
虽然 GROUP_CONCAT 在 Mysql 中不可用,但您也可以在 hibernate 中绑定 SQL 函数,如本文所述。
推荐阅读
- watson-studio - 在 Watson Studio 中使用 Google Vectors
- excel - 如何在活动单元格中打开用户窗体?
- python - 当列的总和为 0 时,将单元格标记为 1
- android - 哪些方法使用 androidManifest 文件中定义的权限?
- typescript - 排除使用的方法
- java - 就像后增量一样,我们在 java 中是否有后分配?
- azure - 从门户恢复已删除的 Azure SQL 数据库 - 部署失败并出现 InternalServerError
- java - 如何在 GridBagLayout 中嵌套 JPanel?
- abap - ABAP 程序在用户帐户被禁用前 X 天通知用户
- javascript - 我在 react 中的过滤器搜索列表不显示过滤后的列表并遇到错误