2017-08-04 162 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`) 
       ) 


    ) 
相关问题