Могу ли я выполнить этот запрос Android с помощью ContentResolver.query ()? (LEFT JOIN и CASE)

Я хочу выполнить следующий запрос (в псевдокоде) на Android:

SELECT C.ID, C.NAME, CASE ISNULL(G.GROUPID,0) = 0 THEN 0 ELSE 1 END INGROUP
FROM CONTACTS C 
LEFT JOIN GROUPMEMBERSHIP G ON G.CONTACTID = C.ID AND G.GROUPID = ?

Я хочу выбрать идентификатор и имя ВСЕХ контактов в адресная книга системы через ContentProvider контактов по умолчанию вместе с Поле 0/1, указывающее, является ли контакт членом группы ? .

Я, конечно, мог бы достаточно легко получить все контакты, а затем достаточно легко перебрать и запросить членство по отдельности в моем классе адаптера, но я мог бы представить выполнение двух запросов, поскольку один внешний объединенный запрос даст гораздо лучшую производительность.

Могу ли я сделать это с помощью стандартной высокоуровневой строковой проекции и метода ContentResolver.query () ? Или такой запрос потребует более прямого выполнения SQL?

21
задан eidylon 3 July 2011 в 02:16
поделиться