使用外键的sqlite查询

时间:2011-07-02 03:39:49

标签: android sqlite

请帮助sqlite n00b。

我有两张桌子

   "CREATE TABLE students (" +
          "_id       INTEGER PRIMARY KEY AUTOINCREMENT," +
          "studentname      TEXT not null," +
          "studentpic       BLOB," +
          "comment          TEXT);";

   "CREATE TABLE classes (" +
           "_id              INTEGER PRIMARY KEY AUTOINCREMENT," +
           "classname        TEXT," +
           "attend           INTEGER," +
           "late             INTEGER," +
           "dtime            TEXT," +
           "student          INTEGER REFERENCES students(_id) on
                             UPDATE CASCADE);";

我想显示特定类的学生列表,但我的classes表仅通过student-id引用它们,如何构建查询以将“classes”表的所有字段拉回单个游标但是使用“学生”表中的实际名称?

非常感谢提前

1 个答案:

答案 0 :(得分:8)

您可以将rawquery方法与以下SQL代码一起使用:

SELECT classes._id, students.studentname, classes.classname, classes.attend, classes.late, classes.dtime
FROM students, classes
WHERE students._id=classes.student

简而言之,通过从两个表中进行选择,您可以加入它们,但是您必须指定它们的连接方式。 SELECT之后的部分告诉您想要的输出。 FROM显示涉及哪些表(这些表的各部分是否显示在输出中)。默认情况下,如果您为它提供两个表,则会创建第一个表中的一行和第二个表中的一个的所有可能组合,因此您需要WHERE子句中的条件,该条件将其缩小到仅匹配学生的行表与具有匹配id的classes表中的相应行。无论是否定义了外键关系,这都有效。

如果您有WHERE子句的其他条件,可以使用AND添加它。例如:

WHERE students._id=classes.student AND classes.classname="Underwater Basket Weaving"

有关Android中SQLite中设置和使用数据库的整个过程的一个很好的教程(你似乎已经了解其中很多)here