2013-03-10 2 views
5

Si supponga ci sono due tabelle creato da:Perché non posso usare l'alias di una tabella e il suo nome originale nella stessa query quando si uniscono due tabelle?

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

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

voglio scoprire che cosa reparto non ha impiego. Io uso un sinistro unirsi come questo:

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

Ma se io uso un alias per reparto o emp, quindi posso solo usare alias e non posso usare il nome della tabella originale. Ad esempio:

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

Viene visualizzato un messaggio di errore "nessuna tabella: reparto" da sqlite.

Se eseguo operazioni su una tabella, posso utilizzare l'alias e il nome della tabella originale nella stessa query.

Qualcuno sa perché?

+0

Siete probabilmente sbaglia: non è possibile utilizzare il nome originale dopo aver assegnato un alias diverso [anche se si sta eseguendo la query una singola tabella] (http://sqlfiddle.com/#!5/98a82/1). In ogni caso, il comportamento che stai osservando è conforme allo standard SQL, per quanto ne so. –

risposta

7

Dopo aver assegnato un alias a una tabella, questo è il suo nuovo nome durante la query - il nome originale non è quindi disponibile.

Il "perché" è dovuto allo standard SQL. Se stai cercando una spiegazione del perché sarebbe stato specificato che funzionasse in quel modo, la ragione principale per cui posso pensare è se ti unisci a un tavolo a se stesso, devi almeno un riferimento per distinguerli, ma se ti è stato permesso di usare anche il nome originale, sarebbe ambiguo in quanto potrebbe riferirsi a entrambi i riferimenti.

Inoltre, se si desidera utilizzare il nome originale, non assegnare un alias