MySQL从查询

时间:2015-12-31 15:03:11

标签: mysql

所以我有三张桌子。 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复制和粘贴,但它在堆栈溢出时格式化它。

2 个答案:

答案 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

我没有测试此查询,但我认为它可以正常运行。