我有一个代表项目分组的表( table1 )和另一个代表项目本身的表( table2 )。
table1.id 是 table2 的外键,在 table1 的每条记录中,我还收集诸如 table2 中与该特定记录关联的记录总数以及各个字段的总和等信息,以便我可以显示分组和内容摘要无需查询table2。
通常 table2 中的项目一次添加/删除一个,所以我更新 table1 以反映 table2 中的更改。
出现了一个新要求,必须将组中的选定项目移动到新组中。我认为它是一个 3 步操作:
- 在 table1 中创建一个新组
- 更新 table2 中选择的记录以指向 table1 中新创建的记录
第三步是从组中减去记录数/我需要显示的其他字段的总和,并将它们添加到新组中,我可以在 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 );
有没有办法重写语句而不必每次都重复子查询?
谢谢
皮耶罗