不明确的列名SQL

时间:2013-10-23 16:56:38

标签: sql sql-server-2008-r2

我有一个查询,它获取特定表的所有记录

我的问题是,当我添加一些列

时,我的查询中出现错误

我的代码:

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” 无论如何要解决这个我错过了什么?谢谢你的帮助

2 个答案:

答案 0 :(得分:3)

您的SQL中有两个不同的article_id列(一个来自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语句中对你正在使用的那个进行别名,这样它将来不会给你带来任何问题。如果你对它做了一些修改,可能会有些含糊不清。稍后查询。)

答案 1 :(得分:1)

您需要为多个表中出现的任何字段包含表别名。 Article_ID同时包含AV和A(可能更多,但我可以看到因为你正在使用的连接而存在于那些2中的字段),所以在你看到Article_ID的任何地方你需要用AV或A作为前缀(取决于哪个)你要从中拉出来的表。)