【问题标题】:MySQL inserting values from queryMySQL从查询中插入值
【发布时间】:2015-12-31 23:50:27
【问题描述】:

所以我有三张桌子。 1:业务 - 由 ID 和姓名组成,2:金钱 - 由个人 ID 和他们赚到的钱组成,3:个人 - 由个人 ID 和他们工作的公司 ID 组成。

我正在尝试遍历业务中的所有行,并将业务欠款的总金额插入到新表中。通过在money table 和business table 上进行连接,我可以很容易地得到一个企业的欠款总额。

我想要做的是遍历所有企业并获取 id,然后在我的 sql 查询中使用该 id 来获取每个企业的总金额。

所以我有类似“插入 business_payout (business_id,money_owed,date) 值的内容(需要在这里获取所有业务 ID我已经构建了适当的查询,但我没有'不知道如何用当前的业务 id 更新它,CURDATE())"

我对 sql 很陌生,但我在网上看到的是游标可能是合适的。我只是想知道这是否是最有效的方法,还是我遗漏了什么。

感谢您的帮助!

编辑:使用表结构更新

业务: business_id int,业务 varChar

金钱: person_id int,钱浮动

人: person_id int,business_id int

抱歉,这不是更详细/更好的格式,我试图从 sql 复制和粘贴,但它在堆栈溢出时将其格式化得很糟糕。

【问题讨论】:

  • Mysql Sql server。请标记您正在使用的那个
  • 当这一切都可以在一个插入查询中完成时,光标是不合适的。请张贴您的表结构,包括金钱、业务、人员、final_target 样本数据和预期输出
  • 一定是不小心点击了sql server。更新了表结构。
  • 您可以添加您已经构建的查询吗?

标签: mysql


【解决方案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

我没有测试这个查询,但我认为它可以正常工作。

【讨论】:

    【解决方案2】:

    首先,我将创建一个用户定义的函数,该函数获取 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 十进制(10,3)

    插入所有总和:

    insert into business_total_sums (business_id, total_sum)
    select business_id, GetBusinessTotalSum(business_id) from Business
    

    还有一件事,我会将表格中的“金钱”字段从浮点数更改为小数,因为浮点数不会保留您放入其中的确切值,而是产生的 nom/denom 的表示(几乎) 相同的值。例如14.4999999999 几乎就像 14.5。小数更能代表货币领域。

    【讨论】:

    • 将其他答案标记为正确,因为它更简单。感谢您的帮助和解释(尤其是小数与浮点数)!!
    猜你喜欢
    • 1970-01-01
    • 2014-06-21
    • 2018-05-05
    • 1970-01-01
    • 2019-08-21
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    相关资源
    最近更新 更多