2016-06-30 1 views
0

は、私は以下の表でsqliteのデータベースを作っています複数のテーブルを持つsqliteデータベース内のリンクオブジェクトのリストを取得するためのクエリは何ですか?

public void onCreate(SQLiteDatabase db) { 
    db.execSQL("CREATE TABLE "+TABLE_CITY+"(" 
      +KEY_ID+" INTEGER PRIMARY KEY, " 
      +KEY_CITY+" TEXT, "+KEY_COUNTRY+" TEXT)"); 
    db.execSQL("CREATE TABLE "+TABLE_DIARY+"(" 
      +KEY_ID+" INTEGER PRIMARY KEY, " 
      +KEY_DATE+" TEXT, "+KEY_STORY+" TEXT)"); 
    db.execSQL("CREATE TABLE "+TABLE_CITY_DIARY+"(" 
      +KEY_ID+" INTEGER PRIMARY KEY, " 
      +KEY_CITY_ID+" TEXT, "+KEY_DIARY_ID+" TEXT)"); 
} 

は今、私は特定の都市に属するすべての日記エントリのリストを取得する(例えばバルセロナは3人の日記やローマ5、しかし、が含まれています私はバルセロナに所属する3人のリストだけが必要です)。 私はこれのためのメソッドを作ったが、私はどのようなクエリをすべきか分からない。あなたはINNERはこのようにJOINを使用する必要があります

public List<Diary> getDiariesByCity(String city_name){ 
    List<Diary>diaries=new ArrayList<Diary>(); 
    SQLiteDatabase db=this.getReadableDatabase(); 
    Cursor curs=db.rawQuery("SELECT * FROM "+TABLE_DIARY........, 
      new String[]{city_name}); 
    if(curs.moveToFirst()){ 
     do{ 
      Diary diary=new Diary(); 
      diary.setId(curs.getInt(curs.getColumnIndex(KEY_ID))); 
      diary.setDate(curs.getString(curs.getColumnIndex(KEY_DATE))); 
      diary.setStory(curs.getString(curs.getColumnIndex(KEY_STORY))); 
      diaries.add(diary); 
     }while(curs.moveToNext()); 
    }return diaries; 
} 

答えて

0

Cursor curs=db.rawQuery("SELECT * FROM " + TABLE_CITY_DIARY + 
+ " INNER JOIN " + TABLE_CITY + " ON " + TABLE_CITY_DIARY + "." + KEY_CITY_ID + "=" + TABLE_CITY + "." + KEY_ID 
+ " INNER JOIN " + TABLE_DIARY + " ON " + TABLE_CITY_DIARY + "." + KEY_DIARY_ID + "=" + TABLE_DIARY + "." + KEY_ID 
+ " WHERE " + TABLE_CITY + "." + KEY_CITY + "=?", new String[]{city_name}); 
+0

おかげで、INNER JOINをまだ知りませんでしたが、それは確かに動作します。最後の引数のKEY_COUNTRYはKEY_CITYでなければなりません。 –

+0

あなたは正しいです。私は答えを更新しました。 – omfo

関連する問題