我目前正在用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_friends
到user_one_id
或user_two_id
为playerId
的所有记录。然后在同一个查询中,我想将其加入玩家。我知道我可以这样获取记录:
SELECT * FROM messenger_friends WHERE user_one_id = {playerId} OR user_two_id = {playerId}
但是我不确定如何将其加入到players
表中,因为我需要将user_one_id
或user_two_id
与players.id
一起加入
答案 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}