我有一个查询,它获取特定表的所有记录
我的问题是,当我添加一些列
时,我的查询中出现错误我的代码:
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” 无论如何要解决这个我错过了什么?谢谢你的帮助
答案 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作为前缀(取决于哪个)你要从中拉出来的表。)