我有以下结构的sqlite DB:
SHIFTS_TABLE
_id
name
..
FACTORS_TABLE
_id
shiftId
..
具有一对多关系(Shift可以有许多因素)。
我想在RecyclerView中显示所有班次信息的列表,包括有关其因素的信息。
我在我的应用程序中使用ContentProvider。我将游标传递给RecyclerViewAdapter。目前,我在ContentProvider中使用带有LEFT JOIN语句的查询来检索所有相关的班次和因素。但是,此查询只是返回包含所有Shift的光标,并且每个移位包含一个因子。我如何获得所有因素?
MyContentProvider.java中查询方法的片段(最后一部分)
case SHIFTS:
queryBuilder.setTables(ShiftsContract.TABLE_NAME + " INNER JOIN " + ProjectsContract.TABLE_NAME
+ " ON " + ProjectsContract.TABLE_NAME + "." + ProjectsContract.Columns._ID
+ " = " + ShiftsContract.TABLE_NAME + "." + ShiftsContract.Columns.PROJECT_ID
+ " INNER JOIN " + ClientsContract.TABLE_NAME
+ " ON " + ClientsContract.TABLE_NAME + "." + ClientsContract.Columns._ID
+ " = " + ProjectsContract.TABLE_NAME + "." + ProjectsContract.Columns.CLIENT_ID
+ " LEFT JOIN " + FactorsContract.TABLE_NAME
+ " ON " + ClientsContract.TABLE_NAME + "." + ClientsContract.Columns._ID
+ " = " + FactorsContract.TABLE_NAME + "." + FactorsContract.Columns.CLIENT_ID
);
我可以在RecyclerViewAdapter的onBindViewHolder中单独查询因素,但是我认为那会非常低效。也许我应该以不同的方式处理此问题,或者数据库设计不佳?