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