В Android Room у меня есть запрос SELECT
, в котором я присваиваю значение столбца component_category.name
другому столбцу: component.component_category_name
после нескольких испытаний мне удалось сделать это с помощью следующего запроса:
@Query("SELECT component.id, rack_id, component_category_id, component.name, component.component_category_name, code, component.img_path, " +
" (SELECT COUNT(component.id) " +
" FROM component " +
" WHERE component.rack_id = :rackID) as count, " +
" (SELECT name " +
" FROM component_category " +
" WHERE component_category.id == component_category_id) as component_category_name " +
"FROM component " +
"INNER JOIN component_category ON component_category.id = component.component_category_id " +
"WHERE component.rack_id == :rackID ORDER BY component.name ASC")
LiveData<List<Component>> getRackComponents(long rackID);
но мне интересно, есть ли более эффективный способ уменьшить размер моего запроса.
Я попробовал следующее:
@Query("SELECT component.id, rack_id, component_category_id, component.name, component.component_category_name AS [component.component_category_name], code, component.img_path, " +
" (SELECT COUNT(component.id) " +
" FROM component " +
" WHERE component.rack_id = :rackID) as count " +
"FROM component " +
"INNER JOIN component_category ON component_category.id = component.component_category_id " +
"WHERE component.rack_id == :rackID AND component_category.id == component.component_category_id ORDER BY component.name ASC")
LiveData<List<Component>> getRackComponents(long rackID);
эта пробная версия, но component.category_name
равно null
в результате этого запроса.