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

У меня есть 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 отображал user_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

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

Uueerdo 13.09.2018 21:04

@Uueerdo, не могли бы вы привести быстрый пример двойного присоединения, я пробовал следующее, но не сработало

Manuraj Sebastian 13.09.2018 21:10
0
2
48
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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

выглядит сложно, позвольте мне попробовать :)

Manuraj Sebastian 13.09.2018 21:18

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

Zaynul Abadin Tuhin 13.09.2018 21:19

@ManurajSebastian нет, это не опечатка в его псевдониме таблицы t2 для соединения с другим столбцом

Zaynul Abadin Tuhin 13.09.2018 21:21

, извините, что снова беспокою, возможно ли это сделать с помощью AS, я создал небольшую систему CMS, у меня нет возможности добавить туда AS

Manuraj Sebastian 13.09.2018 21:41
Ответ принят как подходящий

Я оговорился в своем первоначальном комментарии, вам действительно нужно присоединиться к 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
;

извините, что снова беспокою, возможно ли это сделать с AS, я создал небольшую систему CMS, у меня нет возможности добавить туда AS

Manuraj Sebastian 13.09.2018 21:39

Думаю, тогда мне придется добавить туда возможность добавить AS :)

Manuraj Sebastian 13.09.2018 21:44

Я добавил опцию AS, и когда я запускаю приведенный выше код, мой компьютер просто зависает, я пробовал его на 2 машинах, вы уверены, что в коде нет опечаток или чего-то не хватает

Manuraj Sebastian 13.09.2018 22:24

Попробуйте выполнить запрос в браузере запросов, таком как MySQL Workbench или phpMyAdmin. Если в нем есть опечатка, MySQL должен ее отклонить. Если он работает быстро, вы знаете, что это ваш доморощенный фреймворк. Если он по-прежнему медленный, вы, вероятно, захотите рассмотреть возможность индексации t2 в его поле alias.

Uueerdo 13.09.2018 22:29

kewl, который работал на phpmyadmin MySQL как шарм, но не работает в phpmyadmin Raspbian MariaDB, выяснит, почему он не работает в MariaDB, спасибо чемпиону

Manuraj Sebastian 13.09.2018 23:31

Другие вопросы по теме