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 :)