Соединение таблицы с другой таблицей с использованием одного из двух столбцов - PullRequest
0 голосов
/ 11 января 2019

В настоящее время я пишу программу на C # и хочу загрузить дружбу из базы данных на основе идентификатора, переданного в качестве параметра функции.

У меня есть 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

1 Ответ

0 голосов
/ 11 января 2019
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}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...