MYSQL如何检索两个外键的相关值

时间:2015-08-23 19:11:14

标签: mysql

我有一个用户主表,其基本结构为

用户

userId | userName | userJoinedOn

159 |亚历克斯| 2015年8月23日

160 |史蒂夫| 2015年8月23日

161 |洛基| 2015年8月23日

用户交易表如下。这里user1和user2是users表的外键。

UserTransactions

user1 | user2 |交易

159 | 160 | 3

159 | 161 | 2

160 | 159 | 2

160 | 161 | 2

161 | 159 | 2

161 | 160 | 2

我想按如下方式检索上述交易:

user1Id | user1Name | user2Id | user2Name |交易

159 |亚历克斯| 160 |史蒂夫| 3

此外,它可以进一步缩小到两个彼此执行相同交易的用户。 像160和161一样,两者都完成了交易2。

我认为对于拥有大量用户的服务器而言,这将是非常耗费资源的。 请建议。

3 个答案:

答案 0 :(得分:1)

只需加入2个表:

SELECT
    u1.userId as user1Id,
    u1.userName as user1Name,
    u2.userId as user2Id,
    u2.userName as user2Name,
    ut.transaction
FROM
    UserTransactions ut
        INNER JOIN Users u1 ON (ut.user1 = u1.userId)
        INNER JOIN Users u2 ON (ut.user2 = u2.userId)

SQL JOIN子句用于组合来自两个或多个表的行,基于它们之间的公共字段。

最常见的连接类型是SQL INNER JOIN。 SQL INNER JOIN返回满足连接条件的多个表中的所有行。

user1表中的

UserTransactions列引用userId表中的Usersuser2表中的UserTransactions列引用userId表中的Users。因此,我们必须将UserTransactions加入Users表两次。

答案 1 :(得分:0)

您需要两个联接:

select ut.User1Id, u1.userName, ut.User2Id, u2.userName, ut.transaction
from UserTransactions ut left join
     Users u1
     on ut.user1Id = u1.userid left join
     Users u2
     on ut.user2Id = u2.userid;

答案 2 :(得分:0)

使用别名加入users表两次:

select user1.userId , user1.username ,user2.userId , user2.username, transaction
from usertransaction join users user1 on user1=users.userid
join users user2 on user2=users.userid