Mysql select query — застрял в where condition

#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)
 

Это должно сработать.