使用两列之一将表连接到其他表

时间:2019-01-11 12:12:56

标签: c# mysql join

我目前正在用C#编写程序,我想基于作为函数参数传递的id从数据库中加载友谊。

我有2个表(我只显示重要的列)。

表1:玩家

+----------------------+---------------------+------+-----+---------+----------------+
| Field                | Type                | Null | Key | Default | Extra          |
+----------------------+---------------------+------+-----+---------+----------------+
| id                   | int(11)             | NO   | PRI | NULL    | auto_increment |
| username             | varchar(15)         | NO   |     | NULL    |                |
+----------------------+---------------------+------+-----+---------+----------------+

表2:messenger_friends

+-------------+---------+------+-----+---------+-------+
| Field       | Type    | Null | Key | Default | Extra |
+-------------+---------+------+-----+---------+-------+
| user_one_id | int(11) | NO   | PRI | NULL    |       |
| user_two_id | int(11) | NO   | PRI | NULL    |       |
+-------------+---------+------+-----+---------+-------+

问题是,我的想法如下:在messenger_friends中,节省一行以建立友谊。我知道我可以为一个友谊保存2个,但这意味着更多的存储空间,因为500个友谊将成为1000条记录。现在,在我的应用程序中,我必须将messenger_friends联接到players。我有这个功能:

public async Task<IReadOnlyList<MessengerFriend>> GetFriends(int playerId)

在这里,我需要从messenger_friendsuser_one_iduser_two_idplayerId的所有记录。然后在同一个查询中,我想将其加入玩家。我知道我可以这样获取记录:

SELECT * FROM messenger_friends WHERE user_one_id = {playerId} OR user_two_id = {playerId}

但是我不确定如何将其加入到players表中,因为我需要将user_one_iduser_two_idplayers.id一起加入

1 个答案:

答案 0 :(得分:2)

SELECT * 
FROM players p
JOIN messenger_friends f ON p.id in (f.user_one_id, f.user_two_id)
WHERE p.id = {playerId}

SELECT * 
FROM players p
JOIN messenger_friends f ON p.id = f.user_one_id
                         OR P.id = f.user_two_id
WHERE p.id = {playerId}