我现在正在使用java工作Realm,我不知道如何使用子查询。
我有两个类似下面的RealmObject。
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
声明的唯一途径。
现在有没有更清楚地做到这一点?
答案 0 :(得分:1)
使用您当前的模型,您将不得不迭代:
RealmResults<Statement> statements = realm.where(Statement.class).equalTo("address", "123456789").findAll();
for(Statement statement : statements) {
RealmResults<Sms> sms = realm.where(Sms.class).notEqualTo("id", statement.smsId).findAll();
// do something to sms
}
我不确定查询的真正含义:您的意思是id in
而不是id not in
吗?