i++

プログラム系のメモ書きなど

Android : SQLiteDatabase で複数のテーブルを使って検索

多対多のデータベースから検索する場合に。
JOIN を使ったクエリーを作って SQLiteDatabase#rawQuery します。ON句に結合条件を指定です。

下は、TABLE_TOPIC にトピックが、TABLE_TOPIC_TAG にトピックとタグの対応が格納されていて、特定のタグを持つトピックを取得する、という例。

String query = String.format("SELECT * FROM %s tb1 JOIN %s tb2 ON tb1.%s=tb2.%s WHERE tb2.%s=?",
                TABLE_TOPIC, TABLE_TOPIC_TAG, _ID, COLUMN_TOPIC_ID, COLUMN_TAG_ID);
SQLiteDatabase db = getReadableDatabase();
try {
    Cursor cursor = db.rawQuery(query, new String[]{String.valueOf(tagId)});
    while(cursor.moveToNext()){
        topicList.add(new Topic(cursor.getLong(0), cursor.getString(1), cursor.getString(2)));
    }

参考