【发布时间】:2015-12-17 04:51:36
【问题描述】:
我现在正在使用 java 的 Realm,我不知道如何使用子查询。
我有两个 RealmObjects,如下所示。
public class Sms extends RealmObject {
@PrimaryKey
private String id;
private String address;
}
public class Statement extends RealmObject {
@PrimaryKey
private String id;
private String smsId;
}
我希望使用 Realm 进行查询,以执行与下面的 sql 相同的工作。
SELECT
*
FROM
sms
WHERE
id not in (
SELECT
sms_id
FROM
statement
)
and address = "123456789"
;
我怎样才能实现它?
2015-12-18 更新:
@geisshirt,非常感谢您的友好回答。
我从他的回答中得到了一个想法,下面是结果。
RealmResults<Statement> statements = realm.where(Statement.class).findAll();
RealmQuery<Sms> query = realm.where(Sms.class).equalTo("address", "123456789");
for(Statement statement : statements){
query = query.notEqualTo("id", statement.getSmsId());
}
RealmResults<Sms> smsList = query.findAll();
我认为这将实现我的目标,但我怀疑这是实现not in 或in 声明的唯一方法。
有没有办法更清楚地做到这一点?
【问题讨论】:
-
您在上面使用的循环是目前执行
in之类的唯一方法。另见github.com/realm/realm-java/issues/841 -
@geisshirt 谢谢!!!