Работа с Sqlite Join приводит к появлению курсора

У меня есть отношения «один-многие» в моей локальной базе данных Sqlite. Довольно базовые вещи. Когда я делаю свое левое внешнее соединение, я получаю результаты, которые выглядят следующим образом:

результирующий курсор имеет несколько строк, которые выглядят следующим образом:

A1.id | A1.column1 | A1.column2 | B1.a_id_fk | B1.column1 | B1.column2 

A1.id | A1.column1 | A1.column2 | B2.a_id_fk | B2.column1 | B2.column2 

и так далее...

Существует ли стандартная практика или метод работы с такими результатами? Ясно, что есть только A1, но у него много отношений B-n. Я приближаюсь к использованию нескольких запросов вместо «реляционного способа БД». Надеюсь, я просто не знаю, как лучше поступить.

Я намерен предоставить этот запрос через поставщика контента, и я бы не хотел, чтобы все потребители писали одну и ту же логику агрегирования.


person Bill    schedule 02.06.2010    source источник
comment
Можете ли вы опубликовать оператор sql, который вы используете для своего запроса?   -  person m6tt    schedule 02.06.2010


Ответы (1)


Соединения работали таким образом во всех базах данных SQL, которые я когда-либо использовал — это своего рода определение концепции.

Имейте в виду, что поставщики содержимого используют удаленные вызовы процедур, которые обходятся дорого. Это одна из причин, по которой Android денормализует результаты по тем же принципам, что и ваше соединение для таких вещей, как контакты, чтобы свести к минимуму обмен данными между процессами.

Вы можете рассмотреть возможность использования удаленной службы вместо поставщика контента и предоставления пользовательского API. Вы можете вернуть B для данного A простым List<>. Или вы можете сериализовать все это в формате JSON. Или любое количество других возможностей, если вас беспокоит дублирование данных.

person CommonsWare    schedule 02.06.2010