sqlite запрос с использованием внешних ключей - PullRequest
6 голосов
/ 02 июля 2011

Помогите 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);";

Я хочу отобразить список учащихся в определенном классе, но моя таблица классов ссылается на них только по ученикам-id, как я могу построить запрос, чтобы вытащить обратно в один курсор все поля таблицы 'classes', но использовать фактические имена из таблицы 'Students'?

Большое спасибо заранее

1 Ответ

8 голосов
/ 02 июля 2011

Вы можете использовать метод 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, который сужает его, чтобы сопоставлять только строки из студентов таблица с соответствующей строкой в ​​таблице классов с соответствующим идентификатором. Это работает независимо от того, определена ли связь с внешним ключом.

Если у вас есть дополнительные критерии для предложения WHERE, вы можете добавить это, используя AND. Например:

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

Есть хорошее руководство по общему процессу настройки и использования баз данных в SQLite в Android (большая часть которого вы, кажется, уже поняли) здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...