【问题标题】:How to make Realm query with subquery and in statement如何使用子查询和 in 语句进行领域查询
【发布时间】: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 inin 声明的唯一方法。

有没有办法更清楚地做到这一点?

【问题讨论】:

标签: java android sql realm


【解决方案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

【讨论】:

  • 非常感谢您回答我的问题。我的意思是id not in。我不确定,但我认为您的代码很多 SELECT * FROM sms WHERE id != "example_sms_id" and address = "123456789" ;... 不是吗?再次感谢您的回答。 @geisshirt
猜你喜欢
  • 1970-01-01
  • 2015-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-10
  • 2019-12-15
  • 1970-01-01
相关资源
最近更新 更多