2017-08-04 75 views
0

我有一個用戶表在系統的所有用戶都存儲在數據庫中。 該表具有user_id和business_name以及first_name。 一些用戶是商家,並獲得企業名稱, 一些用戶是消費者,並獲得一個名字。 在第二個表中,我有一個user_id和一個merchant_id(它們定義了交易)和金額的交易。兩個id都引用用戶表。如何從一個mysql表中獲取不同的結果?

Table users: 
user_id bus_name first_name role_id 
1    Thomas  10 
2  comp1     7 
3    Peter   10 
4  comp2     7 
(role_id is defining with 10=consumer, 7=merchant) 

Table transactions: 
trans_id amount user_id merchant_id 
1   12  1   2  
2   23  3   2 
3   34  3   4 
4   19  1   4 

現在我想有一個結果作爲一個表的查詢: 此表應包含與量,USER_ID,FIRST_NAME,MERCHANT_ID和bus_name交易。

我想要得到這樣的結果:

trans_id amount user_id first_name merchant_id bus_name 
1   12  1  Thomas  2   comp1 
2   23  3  Peter  2   comp1 
3   34  3  Peter  4   comp2 
4   19  1  Thomas  4   comp2 

我有問題,要麼我只得到了FIRST_NAME和空bus_name或者我只得到了bus_name而空FIRST_NAME。 我使用的是左連接:

... 
left join `users` 
on(
(`transactions`.`user_id` = `users`.`user_id`) 
) 
... 

但對於這一點,我會得到USER_ID = 1 FIRST_NAME =托馬斯和bus_name =「」是空的,因爲我只引用一個行表和未還給user_id = 2的不同用戶。

但我想說的是這樣的:

for trans_id=1 
get first_name FROM users WHERE transactions.user_id = users.user_id 
AND 
get bus_name FROM users WHERE transactions.merchant_id = users.user_id 

感謝您的幫助,我嘗試了很多事情,但它不工作。

回答

1

你必須加入user表兩次:

SELECT t.*, u.first_name, m.bus_name 
FROM transactions t 
JOIN users as u 
    ON t.user_id = u.user_id 
JOIN users as m 
    ON t.merchant_id = m.merchant_id 
+0

非常感謝,它的工作! – user3899575

0

你可以使用一個duoble加入用戶表

select a.trans_id, a.amount , a.user_id, b.first_name, a.merchant_id, c. bus_name 
from transactions a 
inner join users b on a.user_id = b.user_id and b.role_id = 10 
inner join users c on a.merchant_id = c.user_id and c.role_id = 7 
0

要加入的用戶表的兩倍的罰款。以「左加入users作爲消費者」我創建了一種名爲「消費者」的虛擬用戶表,這一個加入。當然,在選擇中我也必須調整表名。第二個「虛擬」表用戶稱爲「商戶」。

select 
`transactions`.`trans_id` AS `trans_id`, 
`transactions`.`merchant_id` AS `merchant_id`, 
`merchant`.`bus_name` AS `bus_name`, 
`transactions`.`user_id` AS `user_id`, 
`consumer`.`first_name` AS `first_name`, 
`cards`.`card_id` AS `card_id`, 
`cards`.`serial_no` AS `serial_no` 
from (
     `transactions` 
      left join `cards` 
       on(
        (`cards`.`card_id` = `transactions`.`card_id`) 
       ) 
      left join `users` as consumer 
       on(
        (`consumer`.`user_id` = `transactions`.`user_id`) 
       ) 
      left join `users` as merchant 
       on(
        (`merchant`.`user_id` = `transactions`.`merchant_id`) 
       ) 


    ) 
相關問題