2011-07-02 74 views
4

請幫助一個sqlite n00b。使用外鍵的sqlite查詢

我有兩個表

"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'表中的實際名稱?

提前感謝

+0

http://www.higherpass.com/Android/Tutorials/Accessing-Data-With-Android-Cursors/ – Android

回答

7

您可以使用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在類表中的相應行。無論是否存在定義的外鍵關係,這都有效。

如果您具有WHERE子句的其他條件,則可以使用AND來添加此條件。例如:

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

有一個關於設置和使用Android中的SQLite數據庫的整個過程一個很好的教程(其中大部分你已經似乎明白)here

+0

非常棒!先生,非常感謝。我喜歡這個網站!大多數時間在幾分鐘內回答。上次我認真編程時,互聯網仍然只是一個arpanet,我們必須閱讀書籍或面對面地與人交談才能獲得答案。 – Martin

+0

Hey Keith。在SqlSpy或類似的SQLite GUI中工作得很好,但我有一段時間讓android對使用多個表的查詢格式感到滿意。有關如何爲此做出mDb.query聲明的任何提示? – Martin

+0

您是否嘗試過使用mDb.rawquery與SQL?我沒有一個開發平臺可以方便地對我自己進行測試,但我相信rawquery會接受SQLite所需的任何SQL查詢。 –