2016-09-27 74 views
1

我需要显示提出最大查询次数的用户及其部门的名称。我通过加入5个表格来编写以下查询; user,query,profile,degreedepartment别名在查询中不起作用

问题在于结果别名未被用于列名称。对于这两种列看起来像刚才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 
...