当两个表连接时,为什么我不能在同一个查询中使用表的别名及其原始名称?

时间:2013-03-10 02:20:49

标签: sql sqlite alias

假设有两个表由:

创建
CREATE TABLE emp
(
EMPNO int,
EMPNAME varchar(255),
JOB varchar(255),
DEPTNO int
);

CREATE TABLE dept
(
LOC varchar(255),
DEPTNO int
);

我想找出哪些部门没有聘用。我使用这样的左连接:

select dept.* 
from dept  
left join emp 
 on (dept.deptno=emp.deptno) 
where emp.empno is null;

但是如果我使用dept或emp的别名,那么我只能使用别名而不能使用原始表名。例如:

select dept.* 
from dept as d 
left join emp 
 on (dept.deptno=emp.deptno) 
where emp.empno is null;

我收到错误"没有这样的表:dept"来自sqlite。

如果我在一个表上运行操作,我可以在同一个查询中使用别名和原始表名。

有人知道为什么吗?

1 个答案:

答案 0 :(得分:7)

为表分配别名后,这是查询期间的新名称 - 原始名称不可用。

“为什么”是由于SQL标准。如果你正在寻找解释为什么它被指定以这种方式工作的原因,我能想到的主要原因是如果你自己加入一个表,你需要别名至少一个引用来区分它们,但是如果你被允许也使用原始名称,它可能是模糊的,因为它可以引用任何一个参考。

此外,如果要使用原始名称,请不要指定别名