2017-02-27 37 views
0

我有以下表三個表加入具有相同的列

[users] 
id BIGINT, 
name VARCHAR(255), 
email VARCHAR(255), 
role ENUM('admin', 'executive', 'pos') 
... 

[transactions] 
id BIGINT 
fname VARCHAR(255), 
lname VARCHAR(255), 
mobile CHAR(10), 
email VARCHAR(255), 
amount FLOAT(7, 2), 
verified_by BIGINT NOT NULL  # Refers to user.id 
... 

[refunds] 
id BIGINT 
transaction_id BIGINT, 
amount FLOAT(7,2) 
initiated_by BIGINT NOT NULL,  # Refers to user.id 
processed_by BIGINT NULL   # Refers to user.id 
...  

我想加盟退款表,使得它顯示了兩種refunds.initiated_by和退款交易信息以及該users.name .processed_by。由於退款是由具有角色pos的用戶發起的,並且由角色執行人員隨後由另一個用戶處理。我不想將用戶表分成用戶,管理人員和職位,除角色之外,其他所有領域的所有三個領域都相同。

目前我可以獲取交易信息以及發起退款的用戶的姓名。

SELECT refunds.id, fname, lname, mobile, transactions.email, 
     transactions.amount AS transaction_amount, refunds.amount AS refund_amount, 
     users.name AS initiated_by, refunds.processed_by 
FROM refunds 
JOIN transactions 
    ON refunds.transaction_id=transactions.id 
JOIN users 
    ON users.id=refunds.initiated_by; 

這給了我一切,除了處理退款的用戶的名字。我如何獲得?

提前致謝!

回答

1

我認爲你可以做第二個加入到users表在處理退款的用戶名攜帶:

SELECT r.id, 
     t.fname, 
     t.lname, 
     t.mobile, 
     t.email, 
     t.amount AS transaction_amount, 
     r.amount AS refund_amount, 
     u1.name AS initiated_by, 
     u2.name AS processed_by, 
     r.processed_by 
FROM refunds r 
INNER JOIN transactions t 
    ON r.transaction_id = t.id 
INNER JOIN users u1 
    ON u1.id = r.initiated_by 
INNER JOIN users u2 
    ON u2.id = r.processed_by 
+0

由於它的工作! – tusharkant15