查询中的别名不起作用。

3
我需要显示提出最多问题的用户及其部门名称。我通过连接5张表编写了以下查询:userqueryprofiledegreedepartment
问题在于结果中未使用列名的别名。两列都只显示为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
别名应该没有单引号。 - Ayaz Ali Shah
4个回答

2

使用 'as' 关键字可以在 mysql 中使用别名,并且去掉单引号。

select user.name as USER_NAME from user;

然后也尝试使用表名的别名。 - Sagar
你应该避免使用任何保留名称,如果必须使用,一定要正确地使用反引号。 - R. Chappell

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;

有时候,当你使用一些JOIN语句时,Mysql更喜欢你给列起别名。

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

只需从查询中删除引号即可正常工作,但您可以使用关键字AS以明确使用别名。

我也会使用小写别名以避免与关键字混淆,并将关键字使用大写;

SELECT user.name AS user_name, department.name AS dept_name
...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接