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

时间:2016-01-27 17:17:23

标签: android sqlite orm greendao

我使用GreenDao v2.1.0生成了一个SQLite DB。 Here is its diagram (a tiny piece of it)

联系人可以有很多电话号码。 我想制作一个搜索查询:列出其GIVEN_NAME或FAMILY_NAME或PHONE.NUMBER包含特定字词的所有联系人。

例如,with these entries,如果我使用" bob"联系人Sponge Bob将被退回。如果我使用" 222"这个词,将返回联系人Patrick Star。

因为查询中涉及两个表,所以我使用这段代码来使用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行指出了问题:&#34; AND&#34;连接器。我拼命想用&#34; OR&#34;取而代之。

我错过了什么吗?我要离开JOIN解决方案吗? 谢谢:))

1 个答案:

答案 0 :(得分:1)

我有同样的问题。似乎greendao目前无法做到这一点。我正在使用queryRaw()代替。