SQL中用INNER JOIN获取交易表收发双方用户名的方法
解决交易表关联收发双方用户名的问题
核心思路是多次关联同一张表并通过别名区分,因为发送方和接收方的信息都需要通过wallet_table关联到user_table,所以需要分别对wallet_table和user_table进行两次关联,分别对应交易的收发双方。
以下是完整的SQL查询语句:
SELECT t.date_time, su.uname AS sender_uname, t.amount_sent, t.sender_updated_balance, ru.uname AS receiver_uname, t.amount_received, t.receiver_updated_balance FROM transcation_table t INNER JOIN wallet_table sw ON t.sender_wallet = sw.id INNER JOIN user_table su ON sw.userid = su.id INNER JOIN wallet_table rw ON t.receiver_wallet = rw.id INNER JOIN user_table ru ON rw.userid = ru.id;
语句说明:
- 给每张关联的表起别名(
t代表交易表,sw代表发送方钱包,su代表发送方用户,rw代表接收方钱包,ru代表接收方用户),避免同表关联时的字段冲突 - 第一次关联链:
transcation_table→wallet_table(sw)→user_table(su),获取发送方的用户名 - 第二次关联链:
transcation_table→wallet_table(rw)→user_table(ru),获取接收方的用户名 - 通过
AS关键字将用户名字段重命名为sender_uname和receiver_uname,与需求字段对应
如果需要包含没有匹配到用户/钱包的交易(比如测试数据或异常数据),可以将INNER JOIN替换为LEFT JOIN,避免丢失记录。
内容的提问来源于stack exchange,提问作者Xandermage
相关产品推荐
相关产品推荐

