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

标签 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_friendsplayers。我得到了这个功能:

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

在这里,我需要从 messenger_friends 获取所有记录,其中 user_one_iduser_two_idplayerId。然后在同一个查询中,我想将它加入玩家。我知道我可以通过这种方式获取记录:

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

但我不确定如何将它加入到 players 表中,因为我需要加入 EITHER user_one_iduser_two_idplayers.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/

相关文章:

jpa - 如何在 JOIN 中使用 JPA Criteria API

c# - Lambda 表达式 Where VS FirstOrDefault

c# - 在 C# 进程中使用 mysqldump.exe 的 MySQL 重复模式

c# - 如何满足CA2202(不要多次处理对象)

mysql - 从另一列更新具有最高值的 SQL 列

python - 为什么游标在 mysqlclient 中不是可选的?

mysql查询。需要帮助

MySQL CASE LEFT JOINS 返回 NULL

c# - 这种方法使用安全吗?

PHP MySql 查询获取每个用户的总和