[英]How to make Realm query with subquery and in statement
I'm now working Realm with java, I have no idea how can I use subquery. 我现在用java工作Realm,我不知道如何使用子查询。
I have two RealmObjects like below. 我有两个像下面的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;
}
And I want query with Realm to do same work like sql below. 我希望与Realm进行查询,以执行与下面的sql相同的工作。
SELECT
*
FROM
sms
WHERE
id not in (
SELECT
sms_id
FROM
statement
)
and address = "123456789"
;
How can I achieve it? 我怎样才能实现它?
Update 2015-12-18 : 2015-12-18更新:
@geisshirt, many thanks for answer kindly. @geisshirt,非常感谢你的回答。
I had a idea from his answer, and below is result. 我从他的答案中得到了一个想法,下面是结果。
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();
I think this will achieve my goal, but I'm doubtful about this is the only way to achieve not in
or in
statement. 我认为这将实现我的目标,但我怀疑这是实现
not in
或in
声明中的唯一方法。
Is there noway to do this more clearly? 现在有没有更清楚地做到这一点?
With your current model, you will have to iterate: 使用您当前的模型,您将不得不迭代:
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
}
I'm not sure what the query really means: did you mean id in
instead of id not in
? 我不确定查询的真正含义:你的意思是
id in
而不是id not in
吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.