【问题标题】:Alias not working in query别名在查询中不起作用
【发布时间】:2016-09-28 18:19:31
【问题描述】:

我需要显示提出最大查询数的用户及其部门的名称。我通过加入 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

【问题讨论】:

  • 别名应该没有单引号

标签: mysql alias


【解决方案1】:

使用 'as' 关键字以便在 mysql 中使用别名并删除单引号。

select user.name as USER_NAME from user;

【讨论】:

  • 然后使用别名作为表名并尝试。
  • 您应该避免使用任何reserved names,如果必须,请始终正确地回勾。
【解决方案2】:

以下语法非常适合我:

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 更喜欢你在你的列上加上一个别名。

【讨论】:

    【解决方案3】:

    试试这个方法;

    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 
    

    【讨论】:

      【解决方案4】:

      只需从查询中删除引号即可,但您可以使用关键字AS 来明确说明您使用的是别名。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多