2016-01-27 1 views
5

Ich habe eine SQLite DB mit GreenDao v2.1.0 generiert. Here is its diagram (a tiny piece of it)In GreenDao, erstellen Sie eine Join-Abfrage mit OR anstelle von UND

Ein KONTAKT kann viele Telefonnummern haben. Ich möchte eine Suchanfrage stellen: listet alle Kontakte auf, deren GIVEN_NAME oder FAMILY_NAME oder PHONE.NUMBER ein bestimmtes Wort enthält. B. with these entries, wenn ich das Wort "bob" verwende, wird der Kontakt Sponge Bob zurückgegeben. Wenn ich das Wort "222" verwende, wird der Kontakt Patrick Star zurückgegeben.

Da zwei Tabellen in der Abfrage beteiligt sind, griff ich auf die JOIN-Lösung mit diesem Stück Code:

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(); 

Dies erzeugt die folgende 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 

Die fünfte Zeile Punkte aus dem Problem: der "UND" -Anschluss. Ich versuche verzweifelt, es durch ein "ODER" zu ersetzen.

Fehle ich etwas? Soll ich die JOIN-Lösung verlassen? Danke :)

Antwort

1

Ich habe das gleiche Problem. Es scheint, dass greundao das derzeit nicht kann. Ich verwende stattdessen queryRaw().

Verwandte Themen