#mysql #select
#mysql #выберите
Вопрос:
У меня есть 2 таблицы:
Users:
------------------------------
id | name
--------------------------
1 | John
2 | Dane
3 | Foo
4 | Bar
Matches Table:
----------------------------
id | userid1 | userid2
----------------------------
1 | 1 | 3
2 | 2 | 4
Вопрос:
Из таблицы совпадений с идентификатором 1 я хочу получить John и Foo в одном запросе. Как я могу это сделать?
У меня уже есть одно решение, но оно скучное. То есть выбираются записи из таблиц совпадений, а затем во время цикла запускаются запросы для получения имен. .
Комментарии:
1. Просто присоединитесь к таблице дважды
Ответ №1:
Просто используйте JOIN
…
SELECT u1.*, u2.*
FROM Matches m
JOIN Users u1 ON u1.id = m.userid1
JOIN Users u2 ON u2.id = m.userid2
WHERE m.id = [ YOUR DESIRED USER ID (for example: 1) ]
Комментарии:
1. Это работает. Просто вопрос. Разве я не должен использовать inner join? Потому что я уверен в том, что данные существуют в обеих таблицах.
2. @AbhishekSaha Да, вы на 100% правы. Но в большинстве диалектов SQL, если вы хотите выполнить ВНУТРЕННЕЕ СОЕДИНЕНИЕ, вы можете опустить «ВНУТРЕННЮЮ» часть и просто написать «JOIN». «ВНУТРЕННЕЕ СОЕДИНЕНИЕ» и «СОЕДИНЕНИЕ» — это одно и то же, это просто вопрос стиля кодирования (удобочитаемость и краткость)…
3. Идеальный. Спасибо. Отмечаю ваш ответ.
4. @AbhishekSaha Кроме того, то же самое относится и к ВНЕШНИМ соединениям. В большинстве случаев вам не нужно писать слово «ВНЕШНИЙ», но вы можете, если хотите. И «ЛЕВОЕ СОЕДИНЕНИЕ», и «ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ» — это одно и то же. Но просто «ПРИСОЕДИНИТЬСЯ» само по себе подразумевает, что оно внутреннее.
Ответ №2:
SELECT name from Matches, Users where Matches.id = 1 AND (Users.id = Matches.userid1 OR Users.id = Matches.userid2)
Это должно сработать.