2016-09-27 3 views
1

Мне нужно отобразить имя пользователя и их отдел, который поднял максимальное количество запросов. Я написал следующий запрос, присоединив 5 таблиц; user, query, profile, degree, и department.Псевдоним, который не работает в запросе

Проблема заключается в том, что псевдоним не используется для имен столбцов. Для обеих колонок представляется как только name

select user.name 'USER_NAME',department.name 'DEPT_NAME' 
from user 
inner join query on (query.user_id=user.id) 
inner join profile on (user.profile_id=profile.id) 
inner join degree on (profile.degree_id=degree.id) 
inner join department on (degree.department_id=department.id) 
group by user.name 
order by count(query.id) desc 
limit 1 
+2

псевдоним должен быть без одинарные кавычки –

ответ

2

«используется как» ключевое слово для того, чтобы использовать имя псевдонима в MySQL, а также удалить одиночные кавычки.

select user.name as USER_NAME from user; 
+0

попытался с помощью AS, все тот же результат – PiGamma

+0

Затем используйте псевдоним для таблицы имен также и попробовать. – Sagar

+0

Вам следует избегать использования каких-либо [зарезервированных имен] (https://dev.mysql.com/doc/refman/5.7/en/keywords.html), и, если нужно, всегда возвращайте их правильные отметки. –

1

следующий синтаксис работа идеально подходит для меня:

select U.name AS "USER_NAME", D.name AS "DEPT_NAME" 
from user U 
inner join query Q on (Q.user_id=U.id) 
inner join profile P on (U.profile_id=P.id) 
inner join degree C on (P.degree_id=C.id) 
inner join department D on (C.department_id=D.id) 
group by U.name 
order by count(Q.id) desc 
limit 1; 

Иногда Mysql предпочитают вы дуться псевдоним на вашей колонке при использовании некоторых JOIN.

1

Попробуйте это так;

select thisuser.name 'USER_NAME',department.name 'DEPT_NAME' 
from user as thisuser 
inner join query on (query.user_id=thisuser.id) 
inner join profile on (thisuser.profile_id=profile.id) 
inner join degree on (profile.degree_id=degree.id) 
inner join department on (degree.department_id=department.id) 
group by thisuser.name 
order by count(query.id) desc 
limit 1 

но это не является хорошей практикой при построении запроса; это выглядит как этот

select thisuser.name,thisdept.name from 
(select name,user_id from user) as thisuser 
inner join 
(select name,user_id from department) as thisdept 
on thisuser.user_id = thisdept.user_id 
+0

все еще не повезло .. – PiGamma

0

Просто удалите кавычки из запроса, и он будет работать, но вы можете использовать ключевое слово AS чтобы понять, что вы используете псевдоним.

Я бы также использовал псевдонимы в нижнем регистре, чтобы избежать путаницы с ключевыми словами, а также использовать прописные слова для ключевых слов;

SELECT user.name AS user_name, department.name AS dept_name 
... 
Смежные вопросы