2012-02-14 78 views
2

Ho threre。當我運行一個簡單的像一些表中進行選擇:奇怪的SELECT錯誤代碼

SELECT 
    ValidoDa, 
    Tab_Ticket_Default, 
    * 
FROM 
    Dipendente_Stor 
WHERE 
    CodiceAbi = '08753' and 
    Matricola = 98 
order by 
    ValidoDa 

我可以得到錯誤「不明確的列名‘ValidoDa’」

的原因是什麼?只有一個字段叫ValidoDa!

你能解釋這種行爲嗎?

回答

3

ORDER BY將首先嚐試解決SELECT列的列表。

在這種情況下,你有ValidoDa因此兩次被曖昧

您可以用別名修復它這樣,但SELECT *是不好的做法,反正

SELECT 
    ValidoDa AS ValidoDaFOO, 
    Tab_Ticket_Default, 
    * 
FROM 
    Dipendente_Stor 
WHERE 
    CodiceAbi = '08753' and 
    Matricola = 98 
order by 
    ValidoDa 
    -- or ValidoDaFOO 
4

有一列有這個名字,但你在SELECT列表中顯示兩次!

這本身不是問題,SQL允許這樣做(儘管我認爲這是該語言的主要設計缺陷)。

當您嘗試使用ORDER BY子句中的該列時,問題重新出現。現在(有兩個同名的列)SQL抱怨說它無法知道你的意思。

2

因爲您選擇字段ValidoDa兩次 - 一次明確,然後再次使用*。

嘗試

SELECT  ValidoDa,  
    Tab_Ticket_Default,  
    * 
FROM  
    Dipendente_Stor 
WHERE  
    CodiceAbi = '08753' 
    and  
    Matricola = 98 
order by  
    1 

或者

SELECT  ValidoDa,  
    Tab_Ticket_Default,  
    ** all the other fields of Dipendente_Stor ** 
FROM  
    Dipendente_Stor 
WHERE  
    CodiceAbi = '08753' 
    and  
    Matricola = 98 
order by  
    ValidoDa 
2

我認爲,說

order by ValidoDa 

SQL不知道用哪個領域:明確ValidoDa*.ValidoDa。如果你真的需要*(我會刪除它),然後調用第一ValidoDa用別名:

SELECT 
    ValidoDa AS DaQuando, 
    Tab_Ticket_Default, 
    * 
FROM 
    Dipendente_Stor 
WHERE 
    CodiceAbi = '08753' and 
    Matricola = 98 
order by 
    DaQuando