在 GreenDao 中,使用 OR 而不是 AND 构建连接查询



我用GreenDao v2.1.0生成了一个SQLite数据库。这是它的图表(它的一小部分)

一个联系人可以有多个电话号码。我想进行搜索查询:列出其GIVEN_NAME或FAMILY_NAME或电话的所有联系人。数字包含一个特定的单词。

例如,对于这些条目,如果我使用单词"bob",将返回联系人 Sponge Bob。如果我使用"222"一词,将返回联系人帕特里克·斯塔。

由于查询中涉及两个表,因此我使用了这段代码的 JOIN 解决方案:

    QueryBuilder<Contact> qb = getContactDao(context).queryBuilder();
    qb.whereOr(ContactDao.Properties.Given_name.like("%" + word + "%"),
               ContactDao.Properties.Family_name.like("%" + word + "%"));
    qb.join(Phone.class, PhoneDao.Properties.Contact_id)
      .where(PhoneDao.Properties.Number.like("%" + word + "%"));
    List<Contact> contacts = qb.list();

这将生成以下 SQL:

SELECT T."_id", T."GIVEN_NAME", T."FAMILY_NAME"
FROM "CONTACT" T  
JOIN PHONE J1 
ON T."_id"=J1."CONTACT_ID" 
WHERE (T."GIVEN_NAME" LIKE ? OR T."FAMILY_NAME" LIKE ?) AND J1."NUMBER" LIKE ?    
COLLATE LOCALIZED ASC

第 5 行指出了问题:"AND"连接器。我拼命地试图用"OR"替换它。

我错过了什么吗?我应该离开加入解决方案吗?谢谢:)

我有同样的问题。 看来绿道目前做不到这一点。 我改用queryRaw()

相关内容

最新更新