0

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

我的问题是当我添加一些列时我的查询出现错误

我的代码:

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 字段时,我收到一个错误“不明确的列名 article_id” 无论如何要解决这个问题我遗漏了什么?谢谢你的帮助

4

2 回答 2

3

您的 SQL 中有两个不同article_id的列(一个 from AV,一个 from 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语句中使用的那个设置别名,这样它就不会在将来给您带来问题。如果您稍后也对查询进行了一些更改,这可能会有些模棱两可。)

于 2013-10-23T16:59:38.833 回答
1

您需要为出现在多个表中的任何字段包括表别名。Article_ID 在 AV 和 A 中都存在(可能更多,但由于您使用的连接,我可以看到该字段存在于这两个中),因此在您看到 Article_ID 的任何地方,您都需要在其前面加上 AV 或 A(取决于哪个你想从中拉出来的表)。

于 2013-10-23T17:04:49.277 回答