У меня две таблицы:
userdata
guidUser username
-----------------
12 plr1
13 plr2
14 plr3
15 plr4
games
id guidUser1 guidUser2
-------------------------
1 12 13
2 15 14
Я хочу выбрать имена игроков из той же таблицы пользовательских данных на основе их гида.
Результат, который я пытаюсь получить:
id guidUser1 username guidUser2 username2
--------------------------------------------
1 12 plr1 13 plr2
2 15 plr4 14 plr3
Если бы значение было только одно, я мог бы сделать
SELECT g.id, g.guidUser1, u.username, g.guidUser2 from games g, userdata u WHERE g.guidUser1=u.guidUser1
Но как я могу получить второе имя пользователя username2?
Вы можете сделать это, присоединившись к таблице пользовательских данных второй раз.
Примечание. Я использовал современный синтаксис INNER JOIN, чтобы было понятнее, к чему применяются предложения соединения. Я предлагаю вам стремиться использовать современный синтаксис везде, где это возможно, чтобы сделать ваш код более ясным и чистым.
SELECT
g.id,
g.guidUser1,
u1.username AS username1,
g.guidUser2,
u2.username AS username2
FROM
games g
INNER JOIN userdata u1
ON g.guidUser1 = u.guidUser
INNER JOIN userdata u2
ON g.guidUser2 = 2.guidUser
Вы можете присоединиться дважды. Каждое присоединение к таблице userdata
приводит к одному имени пользователя:
SELECT
g.id,
g.guidUser1,
u1.username,
g.guidUser2,
u2.username AS username2
FROM games g
INNER JOIN userdata u1
ON g.guidUser1 = u1.guidUser
INNER JOIN userdata u2
ON g.guidUser2 = u2.guidUser;
хорошее решение! Спасибо! У меня все еще есть проблема с моим настоящим запросом. Не могли бы вы взглянуть на внесенные мной изменения?
Я не могу ответить на ваш обновленный вопрос, потому что вы изменили структуру таблицы. Но похоже, что вы смешиваете неявный и явный синтаксис соединения, что не очень хорошо. Вы можете задать новый вопрос, а затем сослаться на этот.
Да, я проверил и удалил микс и сделал два внутренних соединения, это работает! Спасибо! Я удалю правку, потому что она может вводить в заблуждение проходящих мимо людей
Вы можете попробовать ниже - используя объединение нескольких экземпляров таблицы пользовательских данных
SELECT g.id, g.guidUser1, u.username, g.guidUser2 u1.username as username2
from
games g inner join userdata u on g.guidUser1=u.guidUser
inner join userdata u1 on g.guidUser2=u1.guidUser
Вы пробовали присоединиться к
userdata
?