group by の結果に基づいてテーブルを更新する
解決しようとしている厄介な更新の問題があります。次のように、同じ 3 つの列と追加のさまざまな列を含む 2 つのテーブルがあります。
Table1 {pers_id, loc_id, pos, ... }
Table2 {pers_id, loc_id, pos, ... }
どのフィールドも一意ではありません。最初の 2 つのフィールドは、テーブル (またはテーブル) 内のレコードをまとめて、同じエンティティに属するものとして識別します。テーブル 1 にはエンティティに属する 15 のレコードがあり、テーブル 2 には同じエンティティに属する 4 つのレコードがある可能性があります。3 番目の列 'pos' は 0 から任意の値までのインデックスで、これが更新しようとしている列です。
Table1 と Table2 では、pos 列は 0 から始まり、ユーザーの選択に基づいて増加します。そのため、例 (table1 に 15 レコード、table2 に 4 レコード) では、table1 には 0 から 14 の「pos」値が含まれ、Table2 には0 ~ 3 の「pos」値が含まれます。
Table1 の pos フィールドを、Table2 の類似エンティティのカウント結果でインクリメントしたいと考えています。これは、table2 からの結果を正しく返す sql ステートメントです。
select table2.pers_id, table2.loc_id, count(*) as pos_increment from table2 group by table2.pers_id, table2.loc_id;
更新の最終結果は、例 (table1 に 15 レコード、table2 に 4 レコード) では、同じエンティティの Table1 のすべてのレコードが 4 ずつインクリメントされます (特定のエンティティ グループ化の結果)。0 は 4、15 から 19 などに変更されます。
これは単一のステートメントで達成できますか?