我有一个系统可以向使用MySQL的用户提供贷款,用于本地数据库和实时服务器上的MsSQL,贷款记录一旦获得批准就存储在贷款表中,用户收到贷款,当用户偿还时,贷款存储在支付表中分期贷款记录在存款表中,表格如下所示
贷款:user_id,loan_code,loan_amt
存款:loan_code,deposit_amount,deposit_date
支付:loan_code,dis_amount,dis_date
我有一个挑战是使用MySQL(或MsSQL)作为支付或存款来创建用户最后10个事务的声明,我想创建如下结果
声明:日期,交易类型(存款或支出),贷款代码,金额
答案 0 :(得分:0)
由于您尝试有效合并两个表中的数据,因此您需要使用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