Mysql-запрос для получения данных из нескольких таблиц

0

У меня есть 2 таблицы, t1 и t2, t1 содержит псевдонимы и оценки, в то время как t2 содержит псевдонимы и их реальные имена, я хочу построить запрос, чтобы получить оценки, реальные имена и псевдонимы (пример - желаемые результаты)

t1

alias - scores - tl_alias - tm_alias (column names)

tk - 96 - pp - jj
sp - 94 - pp - jj

t2

name - alias - role  (column names)

tom Koshy - tk - user  
shaun penn - sp - user  
peter pan - pp - tl  
john james - jj - tm

Желаемый результат

user_alias - user_name - scores - tl_alias - tl_name - tm_alias - tm_name (column labels)


tk - tom koshy - 96 - pp - peter pan - jj - john james
sp - shaun penn - 94 - pp - peter pan - jj - john james

Текущие результаты

Следующий запрос дает мне tl_name для всех экземпляров t2.name в запросе, который, по моему мнению, является правильным в соответствии с запросом, но то, что я хотел бы иметь, - это первый экземпляр t2.name, который должен показывать имя пользователя, затем следующий экземпляр должен покажите имя tl_name, а затем tm_name

SELECT t1.alias,t2.name,t1.scores,t1.tl_alias,t2.name,t1.tm_alias,t2.name from t1 JOIN t2 on t1.tl_alias = t2.alias

tk - peter pan - 96 - pp - peter pan - jj - peter pan
sp - peter pan - 94 - pp - peter pan - jj - peter pan

Нижеследующее не работает ни

SELECT t1.alias,t2.name,t1.scores,t1.tl_alias,t2.name,t1.tm_alias,t2.name from t1 JOIN t2 on t1.tl_alias = t2.alias, t1.tm_alias = t2.alias
  • 0
    Вам нужно присоединиться к t2 дважды, один раз для каждого псевдонима.
  • 0
    @Uueerdo, не могли бы вы привести краткий пример присоединения дважды, я пробовал ниже, но не работал
Теги:

2 ответа

0
Лучший ответ

Я высказал свое мнение в своем первоначальном комментарии, вам действительно нужно присоединиться к t2 три раза, например...

SELECT t1.alias AS user_alias, t2_u.name AS user_name
   , t1.scores
   , t1.tl_alias, t2_l.name AS tl_name
   , t1.tm_alias, t2_m.name AS tm_name
FROM t1 
   JOIN t2 AS t2_u on t1.alias = t2_u.alias
   JOIN t2 AS t2_l on t1.tl_alias = t2_l.alias
   JOIN t2 AS t2_m ON t1.tm_alias = t2_m.alias
;
  • 0
    извините, что беспокою вас снова, возможно ли это сделать с AS, я создал небольшую систему CMS, у меня нет возможности добавить туда AS
  • 0
    Я думаю, что мне придется добавить возможность добавить там AS :)
Показать ещё 3 комментария
1

использовать внутреннее соединение и подзапрос

select t3.*,t2.name  from
(    
 select t1.alias,t2.name, t1.scores ,t1.tl_alias  from t1 join t2 on t1.alias =t2.alias
) as t3 join t2 on t3.tl_alias  =t2.tl_alias  

или использовать соединение с t2 два раза, используя псевдоним таблицы

select t1.alias,t2.name, t1.scores ,t1.tl_alias,t3.name 
 from t1 join t2 on t1.alias =t2.alias
      join t2 as t3 on t1.tl_alias=t3.alias
  • 0
    выглядит сложным, позвольте мне попробовать это :)
  • 0
    @ManurajSebastian не сложный, просто используйте t2 два раза в соединении, используя псевдоним таблицы
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню