2017-02-27 35 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