5

以下によって作成された 2 つのテーブルがあるとします。

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 から「no such table: dept」というエラーが表示されます。

1 つのテーブルで操作を実行する場合、エイリアスと元のテーブル名を同じクエリで使用できます。

理由を知っている人はいますか?

4

1 に答える 1

7

テーブルにエイリアスを割り当てると、それがクエリ中の新しい名前になります。元の名前は使用できなくなります。

「理由」はSQL標準によるものです。そのように動作するように指定された理由の説明を探している場合、私が考えることができる主な理由は、テーブルをそれ自体に結合する場合、それらを区別するために少なくとも 1 つの参照をエイリアスする必要があることです。元の名前を使用することも許可されていましたが、いずれかの参照を参照する可能性があるため、あいまいになります。

また、元の名前を使用する場合は、エイリアスを割り当てないでください

于 2013-03-10T02:54:50.490 に答える