5

假设有两个表由以下人员创建:

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;

我从 sqlite 收到错误“没有这样的表:部门”。

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

有人知道为什么吗?

4

1 回答 1

7

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

“为什么”是由于 SQL 标准。如果您正在寻找解释为什么它被指定以这种方式工作,我能想到的主要原因是如果您将一个表连接到自身,您需要为至少一个引用设置别名以区分它们,但是如果您也被允许使用原始名称,因为它可以引用任何一个引用,所以会模棱两可。

另外,如果您想使用原始名称,请不要分配别名

于 2013-03-10T02:54:50.490 回答