如何使用子查询和语句进行Realm查询

时间:2015-12-17 04:51:37

标签: java android sql realm

我现在正在使用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 inin声明的唯一途径。

现在有没有更清楚地做到这一点?

1 个答案:

答案 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吗?