Ho generato un DB SQLite con GreenDao v2.1.0. Here is its diagram (a tiny piece of it)In GreenDao, creare una query di join con OR anziché AND
Un contatto può avere molti numeri di telefono. Voglio fare una query di ricerca: elenca tutti i contatti di cui GIVEN_NAME o FAMILY_NAME o PHONE.NUMBER contiene una parola specifica.
Ad esempio, with these entries, se si utilizza la parola "bob" il contatto Sponge Bob verrà restituito. Se uso la parola "222", il contatto Patrick Star verrà restituito.
Dal momento che, due tabelle sono coinvolti nella query, ho fatto ricorso alla soluzione unirsi a questo pezzo di codice:
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();
Questo genera il seguente 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
The 5th punti di linea fuori il problema: il connettore "AND". Sto disperatamente cercando di sostituirlo con un "OR".
Mi manca qualcosa? Devo lasciare la soluzione JOIN? Grazie :)