gpt4 book ai didi

mysql - 如何从一张mysql表中得到不同的结果?

转载 作者:行者123 更新时间:2023-11-29 10:40:54 25 4
gpt4 key购买 nike

我在数据库中有一个用户表,其中存储了系统的所有用户。该表有一个 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

感谢您的帮助,我尝试了很多方法,但都不起作用。

最佳答案

您必须加入用户表两次:

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

关于mysql - 如何从一张mysql表中得到不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45511410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com