2011-07-02 27 views
4

sqlite n00bを助けてください。外部キーを使用したsqliteクエリ

私はどのようにすることができ、唯一の学生-idでそれらを参照する私は特定のクラスで生徒のリストを表示したい二つのテーブル

"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'テーブルのすべてのフィールドを1つのカーソルに戻しますが、 'students'テーブルの実際の名前を使用するクエリを作成しますか?事前

+0

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

答えて

7

多くのおかげであなたは、次のSQLコードをrawqueryメソッドを使用することができます:二つのテーブルから選択することで、あなたがそれらを結合、要するに

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

が、あなたはどのように指定する必要があります彼らは加わる。 SELECTの後の部分は、出力として必要なものを示します。 FROMは、どのテーブルが関連しているかを示します(これらのテーブルの一部が出力に表示されているかどうかは関係ありません)。デフォルトでは、2つのテーブルを与えると、最初のテーブルの1行と2行目の1行のすべての可能な組み合わせが作成されるため、WHERE句には、生徒の行と一致するように絞り込む条件が必要です対応するIDを持つクラステーブルの対応する行を持つテーブル。これは、外部キー関係が定義されているかどうかにかかわらず動作します。

WHERE句の追加条件がある場合は、ANDを使用してこれを追加できます。たとえば、次のように

here(あなたはすでに理解しているようだどのくらいの)Androidの中のSQLiteでデータベースの設定と使用のプロセス全体に良いチュートリアルはあります
WHERE students._id=classes.student AND classes.classname="Underwater Basket Weaving" 

+0

優秀!どうもありがとうございました。私はこのサイトが大好き!ほとんどの場合、数分以内に回答します。私が真剣にプログラムした最後の時間は、インターネットは依然としてアルパネットであり、答えを得るためには本を読んだり、人々と顔を合わせて話をしなければなりませんでした。 – Martin

+0

ちょっとキース。これはSqlSpyなどのSQLite GUIでうまく動作しますが、複数のテーブルを使用するクエリフォーマットに満足するためには、アンドロイドに時間を割いています。そのためにmDb.queryステートメントを作成する方法に関するヒント? – Martin

+0

SQLでmDb.rawqueryを使ってみましたか?これを自分でテストするのに便利な開発プラットフォームはありませんが、rawqueryはSQLiteに必要なSQLクエリを受け取ります。 –

関連する問題