我有一个向使用Live Server上的本地数据库和MsSQL的MySQL使用MySQL的用户提供贷款的系统,贷款记录一经批准就存储在Loans表中,而用户收到的贷款则存储在Dispossement表中,因为用户需要偿还贷款。分期付款记录在存款表中,表格如下所示

贷款:user_id,loan_code,loan_amt

存款:贷款代码,存款金额,存款日期

支出:借贷代码,支出金额,支出日期

我在使用MySQL(或MsSQL)支付或存款创建用户最近10次交易的报表时遇到了挑战,我想创建如下结果

结单:日期,交易类型(存款或支付),贷款代码,金额

最佳答案

由于您要尝试有效地合并两个表中的数据,因此需要使用UNION运算符。

这是用于MS SQL Server。 MySQL使用LIMIT关键字而不是TOP,但是我相信其余的应该都一样。

SELECT TOP 10
    transaction_date,
    transaction_type,
    loan_code,
    amount
FROM
(
    SELECT
        DEP.deposit_date AS transaction_date,
        'Deposit' AS transaction_type,
        L.loan_code,
        DEP.deposit_amount AS amount
    FROM
        Deposits DEP
    INNER JOIN Loans L ON L.loan_code = DEP.loan_code

    UNION ALL  -- UNION would work also, but UNION ALL will perform slightly better

    SELECT
        DIS.dis_date,
        'Disbursement' AS transaction_type,
        L.loan_code,
        DIS.dis_amount
    FROM
        Disbursements DIS
    INNER JOIN Loans L ON L.loan_code = DIS.loan_code
) SQ
ORDER BY
    transaction_date DESC

09-26 18:41
查看更多