交易表双外键关联用户主表,如何查询关联用户名与金额?
解决方法:两次关联用户主表获取双方用户名
别担心,这个问题的核心是需要两次关联用户主表,因为交易表里的fromUser和toUser都指向用户主表的userid,我们只需要给用户主表取不同的别名来区分转出方和转入方就行。
基础查询语句(只显示存在的用户交易)
这是最常用的写法,只会返回交易双方都在用户主表中有记录的交易:
SELECT um_from.username AS fromUsername, um_to.username AS toUsername, ut.amount FROM user_transactions ut INNER JOIN user_master um_from ON ut.fromUser = um_from.userid INNER JOIN user_master um_to ON ut.toUser = um_to.userid;
代码解释:
- 给用户主表起两个别名:
um_from代表转出用户的信息,um_to代表转入用户的信息 - 第一次
INNER JOIN把交易表的fromUser和um_from的userid关联,拿到转出用户名 - 第二次
INNER JOIN把交易表的toUser和um_to的userid关联,拿到转入用户名 - 最后选择我们需要的三个字段,并用
AS给字段起别名,完全匹配你要的输出格式
可选:包含用户已删除的交易记录
如果有些交易的转出或转入用户已经不在用户主表中了,你还想保留这些交易记录,可以把INNER JOIN换成LEFT JOIN,这样对应的用户名会显示为NULL:
SELECT um_from.username AS fromUsername, um_to.username AS toUsername, ut.amount FROM user_transactions ut LEFT JOIN user_master um_from ON ut.fromUser = um_from.userid LEFT JOIN user_master um_to ON ut.toUser = um_to.userid;
内容的提问来源于stack exchange,提问作者Sadiqabbas Hirani
相关产品推荐
相关产品推荐

