2017-08-04 8 views
0

システムのすべてのユーザーが格納されているデータベースにユーザーテーブルがあります。 テーブルにはuser_idとbusiness_nameとfirst_nameがあります。 一部のユーザーは商人であり、企業名を取得しています。 一部のユーザーはコンシューマーであり、名を取得しています。 2番目のテーブルには、user_idとmerchant_id(トランザクションを定義している)と金額のトランザクションがあります。どちらのIDもユーザーテーブルを参照します。1つの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 

は今、私は1つのテーブルとして結果でクエリを持ちたい: この表は、量、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 =「」私はまた、テーブル内の1つの行に参照していないので、空になるためになるだろう:私は左を使用しています が参加します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

に参加:

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を参加させる」とは、「コンシューマ」と呼ばれる一種の仮想ユーザテーブルを作成します。このコンシューマは参加しています。もちろん、選択するとテーブル名も調整する必要がありました。 「マーチャント」と呼ばれる第2の「仮想」テーブルユーザーにも同じです。

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`) 
       ) 


    ) 
関連する問題