mysql - 为 SELECT 查询中的变量赋值

标签 mysql sql database select insert

我有一个复杂的 MySQL 触发器,目前我想对其进行简化。下面是触发器。

CREATE TRIGGER `Ongoing_Portfolio_AINS` AFTER INSERT ON `Ongoing_Portfolio` FOR EACH ROW
BEGIN
    UPDATE Portfolio
    SET Invest_Amount = New.Investment_Value,
    Cash_Value = New.Cash_Value,
    Date_Of_Last_Update = New.Updated_Date
    WHERE idPortfolio = New.idPortfolio;

    INSERT INTO Ongoing_Fees (currentDate, Gross_Fee, Insurance_Fee, Submit_Fee)
    SELECT current_timestamp,
    New.Gross_Fee,
    (New.Gross_Fee)*(p.E_Fee/100),
    ((New.Gross_Fee)*(p.E_Fee/100))-(p.s_Fee/100)
    FROM Portfolio p
    WHERE p.idPortfolio = New.idPortfolio;
END;

您在这里看到的只是一部分,还有更多。

你可以看到这样的行,

  1. (New.Gross_Fee)*(p.i_Fee/100)
  2. ((New.Gross_Fee)*(p.i_Fee/100))-(p.s/100)

其实,

  1. Insurance_Fee - 是 New.Gross_Fee
  2. 的百分比
  3. Submit_Fee - 是 Insurance_Fee- (p.s_Fee/100)

我想为此引入变量,而不是写这些长长的计算。所以变量会是这样的

  1. _InsuranceFee := (New.Gross_Fee)*(p.i_Fee/100)
  2. _SubmitFee := _InsuranceFee - (p.s_Fee/100)

这种工作会简化计算,当然也易于阅读。但是,如您所见,我的“插入”查询实际上使用的是 Select 查询。这是因为所有“百分比”值都来自表 Portfolio(别名 p) 那么我如何为变量赋值并直接将它们插入到数据库中选择查询?

否则,是否有任何其他方法可以将值分配给变量,这样我就可以在选择查询中使用变量?

最佳答案

你试过只使用局部变量吗?

declare `_InsuranceFee`, `_SubmitFee` decimal(10, 4);

INSERT INTO Ongoing_Fees (currentDate, Gross_Fee, Insurance_Fee, Submit_Fee)
    SELECT current_timestamp, New.Gross_Fee,
           `_InsuranceFee` := (New.Gross_Fee)*(p.E_Fee/100),
           `_SubmitFee` := ((New.Gross_Fee)*(p.E_Fee/100))-(p.s_Fee/100)
    FROM Portfolio p
    WHERE p.idPortfolio = New.idPortfolio;

关于mysql - 为 SELECT 查询中的变量赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27188309/

相关文章:

mysql - 无法添加外键约束 1215

MySQL - 选择从今天开始间隔 1 周的日期

mysql - 计算多次登录的唯一用户数

c# - 如何在 Windows 窗体应用程序中使用 Console.WriteLine()

android - ORMLITE 中的 SQL MAX-MIN - ANDROID

database - ORA-04065 : not executed, 更改或删除存储过程

MySQL数据库UPDATE LIKE查询错误

mysql - "type"和 "status"是MySQL中的保留字吗?

mysql - 如何查询给定固定值的值的百分比

c++ - 我应该对 QSqlDatabase 使用单连接还是多连接