SQLite
 sql >> Base de données >  >> RDS >> SQLite

Comment combiner les données de deux tables distinctes en un seul curseur ?

Vous pouvez utiliser un CursorJoiner pour obtenir quelque chose de similaire à la fusion de deux curseurs en un seul. Le CursorJoiner n'effectue pas réellement de fusion. Au fur et à mesure que vous le parcourez, il déplace les deux curseurs d'origine de sorte que leurs lignes correspondent sur la ou les colonnes spécifiées. C'est pourquoi il est nécessaire que les deux curseurs soient triés sur les colonnes qui doivent être utilisées dans la jointure.

Lien vers la documentation :http://developer.android.com/reference/android/database/CursorJoiner.html

Exemple de code :

CursorJoiner joiner = new CursorJoiner(userCursor, new String[]{ "user_id" }, postCursor, new String[] {"user_id"});

while (joiner.hasNext()) {
    CursorJoiner.Result result = joiner.next();
        switch (result) {
            case LEFT:
                // don't care about this case
                break;

            case RIGHT:
                // nor this case
                break;

            case BOTH:
                // here both original Cursors are pointing at rows that have the same user_id, so we can extract values
                int postId = postCursor.getInt(...);
                String headline = postCursor.getString(...);
                int userId = userCursor.getInt(...);        
                String userName = userCursor.getString(...);

                // do something with above values

                break;

        }
}