假设有两个表由:
创建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。
如果我在一个表上运行操作,我可以在同一个查询中使用别名和原始表名。
有人知道为什么吗?
答案 0 :(得分:7)
为表分配别名后,这是查询期间的新名称 - 原始名称不可用。
“为什么”是由于SQL标准。如果你正在寻找解释为什么它被指定以这种方式工作的原因,我能想到的主要原因是如果你自己加入一个表,你需要别名至少一个引用来区分它们,但是如果你被允许也使用原始名称,它可能是模糊的,因为它可以引用任何一个参考。
此外,如果要使用原始名称,请不要指定别名