我运行了这个查询
SELECT SURVEY.*
, COUNT(RESPONSE.OFFLINE_ID) AS responseCount
FROM SURVEY
INNER JOIN RESPONSE
ON SURVEY.OFFLINE_ID = RESPONSE.OFFLINE_SURVEY_ID
在一个空数据库上,我得到了一个包含一个对象的列表,该对象的所有字段都设置为 null,计数字段设置为 0,而不是一个空列表。有人可以帮忙解决这个问题吗?
更新: 由于我糟糕的列命名,为了更清楚;
- SURVEY 和 RESPONSE 之间是一对多的关系。
- SURVEY 主键为 OFFLINE_ID
- RESPONSE 主键是 OFFLINE_ID
- RESPONSE 表中 SURVEY 的外键标识符为 OFFLINE_SURVEY_ID。
我想做的只是获取调查列表以及相应的响应计数。
最佳答案
您描述的结果非常惊人,因为我看不出您问题中的查询在任何标准 SQL 系统上运行。您问题中的代码应该让服务器提示缺少 GROUP BY,但是根据 @Shawn 的评论,看起来 sqlite 是一个异常(exception)......
<小时/>所以,假设:
- 以上,以及
- 您想要一个空数据库的空列表作为结果,并且
- SURVEY 中有一个 ID 列,
以下查询可能是您想要的:
SELECT
SURVEY.* ,
COUNT(RESPONSE.OFFLINE_ID) AS responseCount
FROM
SURVEY
LEFT OUTER JOIN
RESPONSE
ON
SURVEY.OFFLINE_ID = RESPONSE.OFFLINE_SURVEY_ID
GROUP BY
SURVEY.OFFLINE_ID;
关于java - 使用内部联接查询运行 count() 时,Room 返回包含一项的列表,而不是空列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57246049/