我目前正在用 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
表中,因为我需要加入 EITHER user_one_id
或 user_two_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}
或
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}
关于c# - 使用两列之一将表连接到其他表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54146340/