所以我有三张桌子。 1:业务 - 由ID和名称组成,2:金钱 - 由他们制作的人员ID和金钱组成,3:人员 - 由人员ID和他们工作的业务ID组成。
我试图浏览业务中的所有行,并将新业务所欠的总金额插入新表中。通过在货币表和业务表上加入,我可以很容易地得到企业欠总额的总和。
我想要做的是遍历所有业务并获取ID,然后在我的SQL查询中使用该ID来获取每个业务的总金额。
所以我有类似"插入business_payout(business_id,money_owed,date)值(需要获取所有业务ID ,我有相应的查询已经构建但我不知道如何使用当前业务ID ,CURDATE())"
更新它我对sql很新,但我在网上看到的是光标可能是合适的。我只是想知道这是否是最有效的方法,或者是否有我遗漏的东西。
感谢您的帮助!
编辑:用表格结构更新
商业: business_id int,business varChar
金钱: person_id int,money float
人: person_id int,business_id int
很抱歉,我没有更详细/更好的格式我试图从sql复制和粘贴,但它在堆栈溢出时格式化它。
答案 0 :(得分:1)
首先,我将创建一个用户定义的函数,该函数获取business_id并输出业务所欠的总和。
CREATE FUNCTION `GetBusinessTotalSum`(business_id int(11)) RETURNS decimal(10,3) CHARSET utf8
DETERMINISTIC
BEGIN
declare total_sum decimal(10,3);
...
/* set total_sum to the total sum */
...
RETURN total_sum;
END
然后我会在新表中进行简单的插入。 对于该示例,我们将其命名为" business_total_sums"有两个字段:
business_id int
total_sum decimal(10,3)
要插入所有总金额:
insert into business_total_sums (business_id, total_sum)
select business_id, GetBusinessTotalSum(business_id) from Business
另一件事,我会改变" Money"表格中的字段从浮点数到十进制,因为浮点数不会保留您放入其中的确切值,而是表示产生(几乎)相同值的nom / denom。例如14.4999999999几乎就像14.5。十进制代表货币领域更好。
答案 1 :(得分:1)
我认为您需要一个INSERT/SELECT
语句,如下所示:
insert into business_payout (business_id, money_owed, date)
select bs.business_id, sum(mn.money), curdate()
from business bs
inner join person pr on 1=1
and pr.business_id = bs.business_id
inner join money mn on 1=1
and mn.person_id = pr.person_id
group by bs.business_id
我没有测试此查询,但我认为它可以正常运行。