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))); }