首页 > 解决方案 > [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) "

如何提出正确的请求,以免出现此错误?感谢!

标签: mysqlsqlhibernatehql

解决方案


子查询返回超过 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 函数,如本文所述


推荐阅读