我什么时候可以/应该在 SQL 中使用别名?

问题描述 投票:0回答:1

我有以下代码(可以正常工作):

with t as 
        (select *,

         dense_rank() over (partition by departmentId order by salary desc) as r 
       from employee
  )


select d.name as Department, t.name as Employee, t.Salary

from (t left join department d on t.departmentid=d.id) 

where 
    t.r <=3
    

我不明白的是,如果我尝试为连接表提供别名,为什么会出现错误:

with t as 
        (select *,

         dense_rank() over (partition by departmentId order by salary desc) as r 
       from employee
  )


select d.name as Department, t.name as Employee, t.Salary

from (t left join department d on t.departmentid=d.id) as x

where 
    x.r <=3
    

我知道别名不是必需的,但我不明白为什么它会出错。

我希望代码能够与别名一起正常工作

sql mysql
1个回答
0
投票

(t left join department d on t.departmentid=d.id)
不是一个表格引用,它是两个表格引用。
t
left join department d on t.departmentid=d.id
。给它们统一起一个别名是没有意义的,
t.r
d.name
是明确的。

括号是允许的,但不是必需的,并且暗示不存在的分组。摆脱它们更简单。

with t as (
  select 
    *,
    dense_rank() over (
      partition by departmentId 
      order by salary desc
    ) as r 
  from employee
)
select 
  d.name as Department, 
  t.name as Employee, 
  t.Salary
from t
left join department d on t.departmentId=d.id
where t.r <=3

参见 15.2.13.2 JOIN 子句

© www.soinside.com 2019 - 2024. All rights reserved.