我在一个应用程序中使用ActiveAndroid进行数据库交互。我需要加入几个表,然后过滤结果,这通常是使用带有子查询的SQL查询完成的。
如何使用ActiveAndroid完成子查询?
如果无法执行子查询,是否有方法只返回唯一的模型对象?我的查询中的联接具有在联接表中创建重复行的效果,但我只希望返回每个Model的一个实例。
编辑:提供更多信息
我要检索的模型叫做Profile。
关于查询,有3个表:概要文件、角色和ProfileRoleJoins
概要文件和角色之间存在着多到多的关系,这种关系是由名为ProfileRoleJoins的联接表维护的。
我的目标是获得所有具有特定"event_id“并连接到由角色类型列表指定的一个或多个角色的配置文件。
此查询感兴趣的字段如下:
配置文件
角色
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(),但是这个限定符适用于每一组列-我需要完整的概要文件返回。
我通常完成唯一性的方式是在子查询中执行上述查询,并且只返回不同的Profiles.Id值。然后,我将在主查询中对原始概要表运行一个过滤器。
发布于 2014-07-09 06:28:03
我仍然不知道如何使用ActiveAndroid进行子查询(如果可能的话),但我找到了问题的根源。我使用的是一个过时的版本的库,在查询系统中出现了一些错误,结果被搞砸了。使用当前版本的库,我不会得到副本。
https://stackoverflow.com/questions/24641890
复制相似问题