【发布时间】:2011-06-24 19:52:34
【问题描述】:
背景
我有一个 Android 项目,它有一个包含两个表的数据库:tbl_question 和 tbl_alternative。
为了在视图中填充问题和备选方案,我使用了光标。在我尝试加入这两个表之前,获取我需要的数据没有问题。
Tbl_question ------------- _ID 题 类别ID Tbl_alternative --------------- _ID 问题ID 类别ID 选择我想要以下内容:
SELECT tbl_question.question, tbl_alternative.alternative where
categoryid=tbl_alternative.categoryid AND tbl_question._id =
tbl_alternative.questionid.`
这是我的尝试:
public Cursor getAlternative(long categoryid) {
String[] columns = new String[] { KEY_Q_ID, KEY_IMAGE, KEY_QUESTION, KEY_ALT, KEY_QID};
String whereClause = KEY_CATEGORYID + "=" + categoryid +" AND "+ KEY_Q_ID +"="+ KEY_QID;
Cursor cursor = mDb.query(true, DBTABLE_QUESTION + " INNER JOIN "+ DBTABLE_ALTERNATIVE, columns, whereClause, null, null, null, null, null);
if (cursor != null) {
cursor.moveToFirst();
}
return cursor;
我发现这种方式比常规 SQL 更难形成查询,但我得到了使用这种方式的建议,因为它不易出错。
问题
如何在我的应用程序中连接两个 SQLite 表?
【问题讨论】:
-
您遇到什么错误?您是否尝试通过用字符串文字替换连接的字符串来进行测试? (FWIW,自 1986 年左右以来我就不必使用光标了。但我不是为 android 开发的。)
-
我看不到在光标代码块中指定内部连接列的位置/方式。 SQL 将是“在 T1.questionid =T2.questionid 和 T1.categoryid = T2.categoryid where T1.categoryid = {the desired category value} 的 T1 内部连接 T2 中选择所需的列列表”
-
这是我的错误:不明确的列名:_id:,编译时:SELECT DISTINCT _id, image, question, alternative, questionid FROM tbl_question INNER JOIN tbl_alternative WHERE categoryid=2 AND _id=questionid。所以我假设我需要指定 tbl_question._id = tbl_alternative.questionid,但我不知道如何以我上面使用的查询方式执行此操作。而且我不知道如果我使用“常规” sql-syntax 会返回什么:“Select ' from tbl_question INNER JOIN tbl_alternative ON tbl_question._id = tbl_alternative.questionid AND tbl_question.categoryid = tbl_alternative.categoryid = categoryid;
-
@Tim:你这样做的方式,我如何在db-helper类中形成方法?我不应该返回游标吗?我边走边学,任何能让我的代码变得更好的建议我都非常感谢!
-
这里我已经发布了答案stackoverflow.com/questions/31567564/…