ActiveAndroid:子查询?

时间:2014-07-08 21:26:09

标签: android orm activeandroid

我在应用中使用ActiveAndroid进行数据库交互。我需要加入几个表然后过滤结果,我通常会使用带有子查询的SQL查询来完成。

如何使用ActiveAndroid完成子查询?

如果无法完成子查询,是否有办法只返回唯一的Model对象?我的查询中的连接具有在连接表中创建重复行的效果,但我只想要返回每个模型的一个实例。

编辑:提供更多信息

我尝试检索的模型称为Profile。

关于查询,有3个表: 个人资料,角色和ProfileRoleJoins

配置文件和角色之间存在多对多关系,该关系由名为ProfileRoleJoins的连接表维护。

我的目标是获取所有具有特定" event_id"的个人资料。并连接到由角色类型列表指定的一个或多个角色。

此查询感兴趣的是以下字段:

配置文件

  • 编号
  • event_id(不是外键,只是数据字段)

角色

  • 编号
  • type(TEXT)

ProfileRoleJoins

  • 个人资料(外键)
  • 角色(外键)

我尝试过的事情

String eventId = //provided as input to this function
String[] roles = //array of "types" of roles we want to limit to
String whereClause = //built in a loop, looks like "Roles.type = ? OR Roles.type = ?..."

new Select()
    .from(ProfileEntity.class)
    .where("event_id = ?", eventId)
    .join(ProfileRoleJoinsTable.class)
    .on("Profiles.Id = ProfileRoleJoins.profile")
    .join(RoleEntity.class)
    .on("ProfileRoleJoins.role = Roles.Id")
    .where(whereClause, roles)
    .execute();

上述查询存在返回重复的配置文件的问题,因为单个配置文件可以与多个角色相关联,这会在连接过程中创建重复项。

我需要检索一个独特的个人资料列表。

我尝试使用Distinct(),但该限定符适用于每组列 - 我需要整个配置文件。

我通常完成唯一性的方法是在子查询中执行上述查询并仅返回DISTINCT Profiles.Id值。然后我会在主查询中针对原始的个人档案表运行一个过滤器。

1 个答案:

答案 0 :(得分:1)

我仍然不知道如何使用ActiveAndroid进行子查询(如果它甚至可能),但我发现了问题的根源。我使用的是过时的库版本,查询系统中出现了一些错误,导致结果搞砸了。使用库的当前版本,我不会重复。