2015-12-09 1 views
1

Я борюсь с написанием запроса присоединиться к MySQLборется с запросом SQL присоединиться к

У меня есть две таблицы

Проблемы

challenge_ID(int) |to_user(int)|from_user(int)|timestamp|gameID=>nullable 

Пользователи

iduser(int)|first_name(string) 

Я хочу получить первое имя to_user и form_user, когда у меня есть вызовID

, например, если

Проблемы

challenge_ID(int) |to_user(int)|from_user(int)|timestamp|gameID 
    1    9   10    sometimestamp 

Пользователи

iduser(int)|first_name(string) 
    9    Tom 
    10   Chris 
    11   Patrick 

Я хотел бы получить 'Тома' и 'Крис' для вызова ид 1

Спасибо за вашу помощь ,

ответ

1

Это может быть что-то вроде этого:

SELECT first_name 
FROM Users 
WHERE iduser IN (SELECT to_user 
       FROM challenges 
       WHERE Challenge_Id = 1 
       UNION 
       SELECT from_user 
       FROM challenges 
       WHERE Challenge_Id = 1) 
0

это, как вы делаете это

select c.* ,u.first_name as to_name , u2.first_name as from_name 
FROM challenges c 
join users u on c.to_user = u.id 
join users u2 on c.from_user = u2.id 
where c.challenge_ID = 1 
0

Похоже, вам нужен UNION, а затем JOIN:

SELECT users.first_name 
FROM (
    SELECT from_user AS usr FROM challenges WHERE challenge_id=1 
    UNION 
    SELECT to_user FROM challenges WHERE challenge_id=1 
) u INNER JOIN users ON u.usr = users.id_user 

UNION удалит дубликаты в подзапросе, если нет дубликатов, вы можете использовать UNION ALL, который быстрее.

0

Вы можете попробовать этот запрос

SELECT u_to.first_name, u_from.first_name 
FROM challenges c 
INNER JOIN users u_to ON u_to.iduser = c.to_user 
INNER JOIN users u_from ON u_from.iduser = c.from_user 
WHERE c.challange_ID = 1 
Смежные вопросы