2016-01-11 149 views
0

我有一個系統可以爲使用MySQL的用戶提供本地數據庫和MsSQL服務器上的貸款,貸款記錄一旦被批准就存儲在貸款表上,用戶收到貸款在支付表作爲用戶償還分期它被記錄在存款表貸款,表是如下所示加入交易表來創建一個交易聲明

貸款:USER_ID,loan_code,loan_amt

存款:loan_code,DEPOSIT_AMOUNT,deposit_date

付款方式:loan_code,dis_amount,dis_date

我有一個挑戰,創造使用MySQL(或MSSQL)是要麼支付或存款的用戶的最後10交易的聲明,我想創建一個結果如下

聲明:日期,交易類型(存款或支出),貸款代碼,金額

+0

你嘗試了什麼,你得到了什麼錯誤? –

+1

你需要決定....是這個mysql或sqlserver嗎?他們不是一回事,查詢可能會有所不同。 –

+0

使用與生產不同的軟件進行開發很可能會導致問題。這個問題是一個很好的例子,因爲sql server和mySql對於「top n」查詢有不同的語法。 –

回答

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 
+0

如果要在外部SQL語句中使用另一列,則需要將其添加到子查詢中每個SQL語句的列列表中。 –