我有一个向使用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