2012-02-14 1 views
2

Ho threre。奇妙なSELECTエラーコード

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

私はエラーを取得することができ、「あいまいな列名 『ValidoDa』」

理由は何ですか:私は簡単なのようないくつかのテーブル上で選択し実行すると? ValidoDaと呼ばれるファイルは1つだけです!

この現象について説明できますか?

答えて

3

ORDER:あなたが本当に必要な場合*は(私はそれを削除します)その後、別名で最初ValidoDaを呼び出します。

この場合

、あなたはValidoDaを持って二回ので、それはあなたが別名で、このようにそれを修正することができます

曖昧ですが、SELECT *はとにかく

SELECT 
    ValidoDa AS ValidoDaFOO, 
    Tab_Ticket_Default, 
    * 
FROM 
    Dipendente_Stor 
WHERE 
    CodiceAbi = '08753' and 
    Matricola = 98 
order by 
    ValidoDa 
    -- or ValidoDaFOO 
悪い習慣です
4

この名前の列が1つありますが、SELECTの一覧に2回表示されています。

これは問題ではありませんが、SQLではこれが許されています(これは言語の主要な設計上の欠陥だとは思いますが)。

ORDER BY句でその列を使用しようとすると、問題が再現されます。今、(同じ名前のカラムが2つあります)SQLは、あなたが意味するものがどれかを知ることができないと文句を言います。

2

フィールドValidoDaを2回選択しているため、明示的に1回、*を使用して再度入力します。

order by ValidoDa 

言ってSQLを使用するフィールドを知らないことを私は考える

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

をお試しください:明示的なValidoDaまたは*.ValidoDaを。 SELECT列リストを解決する意志の最初の試みBY

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