sql >> データベース >  >> RDS >> SQLite

アンドロイドルームデータベースとの1対多の関係でフィルタリングする方法

    @Relationがどのようになっているのか見てみましょう 動作します。 2つの段階があります:

    1. Roomは、@Queryに入力したクエリを実行します ユーザーを獲得するため。いつものように、そのクエリには結合が含まれていません。このクエリは、メインテーブル(User)に保持されているデータの部分を取得するために使用されます あなたの場合)。
    2. Roomはもう1つのクエリを実行します。そのためには、@Relationを調べます。 パラメータを設定し、次にクエリするテーブルを理解します(Record あなたの場合)そして何がユーザーの結果との結合条件であるべきか。このクエリ作成プロセスに侵入する方法がないことが重要です。 Recordにフィルターを設定することはできません たとえば、のフィールド。結果を取得するRoomは、必要な形式に変換します(Recordsのリストを埋めます) 。

    選択肢があります:

    1. Recordsにフィルターを設定するための関係を変更するには テーブル(ただし、リストなしでフラットなデータを取得できます)。
    public class UserWithRecords {
        @Embedded
        protected Record record;
        @Relation(
                parentColumn = "user_id",
                entity = User.class,
                entityColumn = "id"
        )
        protected User user;
    }
    

    クエリを次のように変更します:

    @Transaction
    @Query("SELECT * FROM record_table WHERE date=:date")
    public LiveData<List<UserWithRecords>> getDailyRecord(String date);
    
    1. @Relationは使用しないでください まったく、あなたが試したような結合でクエリを書いてください。ただし、結果をコード内の必要な形式に手動で変換する必要があります(結果をループしてリストを形成します)。



    1. 初心者向けのSQLNotEqual To()演算子

    2. PostgreSQLで継承されたテーブルを使用するのはいつですか?

    3. カンマ区切りの列で特定の値を照会することはできますか?

    4. テーブルをロックせずにMySQLDumpを実行する