アイテムのグループ化を表すテーブル ( table1 ) と、アイテム自体を表す別のテーブル ( table2 ) があります。
table1.id は table2 への外部キーであり、table1 のすべてのレコードで、その特定のレコードに関連付けられた table2 のレコードの総数やさまざまなフィールドの合計などの情報も収集して、グループ化と内容の要約を表示できるようにしますtable2 をクエリする必要はありません。
通常、table2 の項目は一度に 1 つずつ追加/削除されるため、table1 を更新して table2 の変更を反映します。
新しい要件が発生しました。グループ内の選択されたアイテムを新しいグループに移動する必要があります。私はそれを3段階の操作と考えました:
- table1 に新しいグループを作成する
- table2 で選択されたレコードを更新して、table1 で新しく作成されたレコードを指すようにします
3 番目のステップは、レコード数 / 表示する必要がある他のフィールドの合計をグループから減算し、それらを新しいグループに追加することです。このデータは、新しいグループに関連付けられた項目について table2 をクエリするだけで見つけることができます。
機能する次のステートメントを思いつきました。
update table1 t1 set
countitems = (
case t1.id
when 1 then t1.countitems - ( select count( t2.id ) from table2 t2 where t2.id = 2 )
when 2 then ( select count( t2.id ) from table2 t2 where t2.id = 2 )
end
),
sumitems = (
case t1.id
when 1 then t1.sumitems - ( select sum( t2.num ) from table2 t2 where t2.id = 2 )
when 2 then ( select sum( t2.num ) from table2 t2 where t2.id = 2 )
end
)
where t1.id in( 1, 2 );
毎回サブクエリを繰り返さずにステートメントを書き直す方法はありますか?
ありがとう
ピエロ