2013-10-23 72 views
0

我有一個查詢它獲取特定表的所有記錄Ambigious列名SQL

我的問題是,我得到一個錯誤在我的查詢時,即時通訊增加了一些列

我的代碼:

SELECT AGENCY_TIER_I,AGENCY_TIER_II,article_name FROM (SELECT * FROM 
     (SELECT RANK() OVER (PARTITION BY ARTICLE_ID ORDER BY VERSION DESC) SEQ, * 
     FROM EGPL_KB_ARTICLE_VERSION WITH(NOLOCK)) AV 
     WHERE AV.SEQ = 1) AV 
     INNER JOIN EGPL_KB_ARTICLE A WITH(NOLOCK) 
     ON AV.ARTICLE_ID = A.ARTICLE_ID 
     INNER JOIN EGPL_KB_ARTICLE_DATA AD WITH(NOLOCK) 
     ON AV.ARTICLE_REFERENCE_ID = AD.ARTICLE_REFERENCE_ID 

此查詢運行正常

出現問題就在這裏:

SELECT AGENCY_TIER_I,AGENCY_TIER_II,article_name,article_id FROM (SELECT * FROM 
     (SELECT RANK() OVER (PARTITION BY ARTICLE_ID ORDER BY VERSION DESC) SEQ, * 
     FROM EGPL_KB_ARTICLE_VERSION WITH(NOLOCK)) AV 
     WHERE AV.SEQ = 1) AV 
     INNER JOIN EGPL_KB_ARTICLE A WITH(NOLOCK) 
     ON AV.ARTICLE_ID = A.ARTICLE_ID 
     INNER JOIN EGPL_KB_ARTICLE_DATA AD WITH(NOLOCK) 
     ON AV.ARTICLE_REFERENCE_ID = AD.ARTICLE_REFERENCE_ID 

當我添加article_id字段時出現錯誤「ambigous column name article_id」 有沒有辦法解決這個問題我錯過了什麼?感謝您的幫助

+3

作爲一個偉大的人曾經說過「前綴你的列,這不會發生在你身上!」。 – Zane

回答

3

你有兩個不同的article_id列在您的SQL(一個來自AV,一個從A,它不知道你要哪一個只返回別名一個你真正想要SELECT

SELECT AGENCY_TIER_I,AGENCY_TIER_II,article_name, 
    AV.article_id FROM (SELECT * FROM 
    (SELECT RANK() OVER (PARTITION BY ARTICLE_ID ORDER BY VERSION DESC) SEQ, * 
    FROM EGPL_KB_ARTICLE_VERSION WITH(NOLOCK)) AV 
    WHERE AV.SEQ = 1) AV 
    INNER JOIN EGPL_KB_ARTICLE A WITH(NOLOCK) 
    ON AV.ARTICLE_ID = A.ARTICLE_ID 
    INNER JOIN EGPL_KB_ARTICLE_DATA AD WITH(NOLOCK) 
    ON AV.ARTICLE_REFERENCE_ID = AD.ARTICLE_REFERENCE_ID 

(你也應該別名你使用的PARTITION BY語句,所以它不會導致你在未來的問題之一。它可以,如果你做了一些改動,以查詢有些模糊以後也是如此)。

+0

在這種情況下,對他來說可能是最好的。你做到了。真棒。 –

+1

@JustinE:我同意;我會在'SELECT'和'PARTITION BY'中混合一個,以便稍後澄清。現在引起這個問題的一個是'SELECT'列表中的問題,因爲'PARTITION BY'中的一個也在海報所說的那個中是不合理的。 –

+0

@KenWhite謝謝你,我在爲自己笑,爲什麼我沒有注意到這一點。我只是不高興,有人低估了我的問題。不管怎麼說,還是要謝謝你。 – user2895518

1

您需要包含在多個表中發生的任何字段的表別名。 Article_ID同時包含AV和A(可能更多,但由於您使用的連接,我可以看到該字段存在於這兩個字段中),因此,無論您在哪裏看到Article_ID,都需要以AV或A開頭(取決於哪個表你想從它拉)。