2012-10-23 59 views
0

考慮到這是在一個MySQL腳本中定義:如何訪問mysql別名?

`Project1`.`Id` AS `Id1d334656-0d51-4bf6-bb08-6c25d01e7745` 

這是否意味着

`Project1`.`Id` 

不再訪問該名稱,並只能由

`Project1`.`Id1d334656-0d51-4bf6-bb08-6c25d01e7745` 

背景:此腳本由MySqlConnector/net生成,並且這是生成的命令的一部分。

回答

2

別名沒有表分配,所以它只是ID1d3346etc....。如果他們這樣做了,那就會破壞別名的目的,例如,

select table1.x AS abc, table2.x AS abc 

將是一個錯誤,即使兩個別名是從不同的表來。

+0

如果只是其中之一被定義爲'select table1.x AS abc',然後在後來嘗試使用'table.x'來引用'table.x',這是什麼原因導致,以及爲什麼會拋出異常? –

+0

我相信沒有什麼會導致拋出異常。這在我的代碼或結構中一定是錯誤的。感謝Marc,我接受了這個答案。 –

+0

別名僅存在於查詢級別。 'select table1.x AS abc,table2.abc'不是一個錯誤,因爲'abc'和'table2.abc'是兩個完全不同的東西,但是稍後嘗試使用'abc'將會是不明確的。 –

1

是的。這很像在選擇時重命名列。在select查詢之外,應該使用別名來引用列,但在選擇查詢中,應該使用表列,例如如下:

select col1 as a 
    from table b 
    where col1 = 'xxx'; 

但外面選擇查詢,別名應該使用:

select a 
from (select col1 AS a From table) b 
where a = 'xxxx'; 

如果您嘗試使用表列,它將會失敗:

<<----FAILURE --> 
select col1 
from (select col1 AS a From table) b 
where a = 'xxxx';