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

C# 使用两列之一将表连接到其他表,c#,mysql,join,C#,Mysql,Join,我目前正在用C#编写一个程序,我想根据作为函数参数传递的id从数据库加载友谊 我有两个表(我只显示重要的列) 表1:球员 +----------------------+---------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------

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

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

表1:球员

+----------------------+---------------------+------+-----+---------+----------------+
| Field                | Type                | Null | Key | Default | Extra          |
+----------------------+---------------------+------+-----+---------+----------------+
| id                   | int(11)             | NO   | PRI | NULL    | auto_increment |
| username             | varchar(15)         | NO   |     | NULL    |                |
+----------------------+---------------------+------+-----+---------+----------------+
表2:信使之友

+-------------+---------+------+-----+---------+-------+
| 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\u好友
玩家
。我得到了这个函数:

public async Task<IReadOnlyList<MessengerFriend>> GetFriends(int playerId)
但我不确定如何将其加入
players
表,因为我需要将
user\u one\u id
user\u two\u id
players.id

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


JOIN messenger\u friends ON p.id in(f.user\u one\u id,user\u two\u id)
JOIN table ON id in(fk1,fk2)
是个好主意,我不知道它能起作用。你应该把它发布为answer@juergend
f.user\u two\u id
,按你写的方式,这意味着更多的存储空间,因为500条友谊将变成1000条记录。恕我直言,这不是对数据进行去优化(非规范化)的好理由。如果有选择的话,不要在数据中设计额外的列,因为额外的行可以满足需要。阅读关于规范化的内容。@O.Jones所以你说将其存储为
user\u id
friend\u id
而不是我想要的方式更整洁/更好?是的,没错。这是一种更灵活的方法,正如您所发现的,它会导致更简单、更清晰的查询。我看到您更新了答案,但这不起作用,因为
={playerId}
会将您自己的ID链接到玩家,而不是您朋友的ID。我能够让它与
一起工作=尽管如此。谢谢你的查询,我认为OR在加入中可能不起作用。(无法编辑评论)。
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}