我有一个非常简单的链接表,代表模块和导师
final String table = "module_tutor";
final String[] columns = {"module_id"};
final String where = "tutor_id = ?";
final String[] whereArgs = {String.valueOf(tutorID)};
final String groupBy = null;
final String having = null;
final String orderBy = "module_id";
Cursor c = getDbAdapter().selectRecordsFromDB(table, columns, where, whereArgs, groupBy, having, orderBy);
然后这个光标包含所有module_id记录,其中这个特定的导师是导师,我想要的是获取存储在不同表中的所有模块细节。
检索这些的最佳方法是什么,我是否使用游标中的值在循环中构造一个非常长的原始sql查询,在游标有下一条记录时附加module_id,或者我应该放弃使用游标和按照
的方式编写SQL查询SELECT module_title, module_credit, module_xyz
FROM modules
WHERE module_id IN
(
SELECT module_id
FROM module_tutor
WHERE tutor_id = ?
)
如果后者是可取的,虽然我宁愿避免这种情况,因为我的表结构在这一点上可以改变,第一个解决方案更容易管理我如何在SQLite中实现这个 - 一旦我让数据库在内部工作对于我的应用程序,我打算通过内容提供程序公开它,因此光标解决方案似乎更可取,因为我认为它更接近我最终将如何在我的应用程序中使用数据库。
答案 0 :(得分:0)
您不必使用嵌套选择,只需加入两个表:
select module_title, module_credit from modules m, module_tutor mt
where mt.module_id=m.id and mt.tutori_id=?
如果您有ContentProvider,则不必公开实际的表结构等,因此您可以相对自由地更改底层数据库。使用更简单,最有效的方法。