1

我有一个应用程序(它的 ruby​​ on rails 但没关系),我在其中批量加载每个分支的项目和数量。

数据库是sqlite。

假设我有两个表:项目和数量。

items columns:
 id
 quantity

quantities columns:
 id
 item_id
 branch_id
 value

我需要能够遍历 items 表中的所有记录,将 item.quantity 设置为 item_id 与 item.id 匹配的所有 quantity.value 的总和

我想知道是否有办法在 sql 查询(选择和更新)中完成所有这些操作,这样我就不必将数据从数据库中提取出来,进行计算,然后将更新的数量写回对于每个项目,我希望使用 sql 语句和函数将它们全部发生在数据库中。

这在 sql 查询函数 db 端是否可行?

example:
item[1] = {id=>1,quantity=>0}
quantity[1] = {id=>1,item_id=>1,value=>100,branch_id=>1}
quantity[2] = {id=>2,item_id=>1,value=>200,branch_id=>2}
quantity[3] = {id=>3,item_id=>1,value=>300,branch_id=>3}

item[1].quantity = quantity[1].value + quantity[2].value + quantity[3].value
4

2 回答 2

0

您可以通过update查询来做到这一点。在这种情况下,您可以使用相关子查询来计算给定项目的数量总和:

update item
    set quantity = (select sum(value) from quantities where item.id = quantities.item_id);

编辑:

如果您想加快速度,请在quantities(item_id, value).

您也可以quantities在临时表中汇总并改用它。然而,该指数对于性能来说应该是足够的。

于 2013-08-30T01:24:16.327 回答
0

你在复制你的数据!这意味着您必须始终保持一切同步。我更愿意创建一个视图并从那里获取总量:

CREATE TABLE items(id, ...);
CREATE TABLE quantities(id, item_id, branch_id, value, ...);
CREATE VIEW items_sum AS SELECT items.*, SUM(quantities.value) AS quantity FROM items LEFT JOIN quantities ON items.id=quantities.item_id GROUP BY items.id;

作为items_sum查询,您不必更新它。SELECT * FROM items_sum;将返回总数量的所需结果。

于 2013-08-30T13:05:05.323 回答