我在数据库中有一个用户表,用于存储系统的所有用户。 该表具有user_id和business_name以及first_name。 有些用户是商家并获得商家名称, 一些用户是消费者并获得名字。 在第二个表中,我有与user_id和merchant_id(定义交易)和金额的交易。两个ID都引用用户表。
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 = Thomas而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
感谢您的帮助,我尝试了很多东西,但它不起作用。
答案 0 :(得分: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
答案 1 :(得分:0)
您可以在用户表中使用duoble join
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
答案 2 :(得分:0)
加入用户表两次工作正常。使用“left join users
作为使用者”我创建了一种名为“consumer”的虚拟用户表,这个表已加入。当然在选择中我也必须调整表名。第二个“虚拟”表od用户也称为“商家”。
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`)
)
)