java - 使用内部联接查询运行 count() 时,Room 返回包含一项的列表,而不是空列表

标签 java android sql sqlite android-room

我运行了这个查询

 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)......

<小时/>

所以,假设:

  1. 以上,以及
  2. 您想要一个空数据库的空列表作为结果,并且
  3. 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/

相关文章:

sql - 我应该如何将短文本字符串存储到 SQL Server 数据库中?

php - mysql 两表三列依赖查询

java - 无法移动线性布局中的项目

java - android.permission.ACCESS_FINE_LOCATION 还向 android.permission.ACCESS_COARSE_LOCATION 授予权限

mysql - SQL #1064 - 您的 SQL 语法有错误; Joomla 组件安装中的 `` 附近

java - 将 JsonObject 转换为 JsonArray 时出错

Selenium-Java 库中缺少 AndroidWebDriver 类

java - 部分 mock 的替代品?

java - 从同一个方法返回两个数组?

java - 通过 fasterxml 将 XML 文件解析为 POJO 时出现异常 "No suitable constructor found for type [simple type..."