繁体   English   中英

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

[英]How to make Realm query with subquery and in statement

我现在用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 inin声明中的唯一方法。

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

使用您当前的模型,您将不得不迭代:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM