2011-08-30 31 views
1

警告, 「醜」 查詢警報(MS SQL Server 2008中):爲什麼這個「分頁」查詢會拋出「與表名或別名不匹配」的錯誤?

SELECT BaseDocs.* FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY BaseDocs.DateUpdated DESC) AS Row, BaseDocs.* 
    FROM BaseDocs INNER JOIN DocCats ON BaseDocs.DocId = DocCats.DocId 
    WHERE DocCats.CatId IN (4) AND BaseDocs.BaseId = 1 
) AS Paged 
    WHERE Row > 0 AND Row <=3 

這個查詢拋出這個錯誤:

The column prefix 'BaseDocs' does not match with a table name or alias name used in the query.

該查詢針對這些表:

BaseDocs Table 
- DocId PK 
- BaseId FK 
- ... 

DocCategories Table 
- CatId PK 
- ... 

DocCats (join) Table 
- DocId FK PK 
- CatId FK PK 

在對這個查詢進行了長時間的「黑客攻擊」之後,我認爲我的大腦正在煎炸......但它很接近,我能感覺到它。提前致謝!

+0

哎呀良好的出發點......咄,對不起......得到了,而寫的問題分心。 ;)現在編輯... – Chaddeus

回答

3

只是不要在您的SELECT中指定表別名 - 該表別名只可見您的子查詢內

SELECT * 
FROM 
    (SELECT 
     ROW_NUMBER() OVER (ORDER BY BaseDocs.DateUpdated DESC) AS Row, 
     BaseDocs.* 
    FROM BaseDocs 
    INNER JOIN DocCats ON BaseDocs.DocId = DocCats.DocId 
    WHERE 
     DocCats.CatId IN (4) 
     AND BaseDocs.BaseId = 1 
) AS Paged 
WHERE 
    Row > 0 AND Row <= 3 

或者:使用給你的子查詢別名:

SELECT Paged.* ..... 
+0

OMG,這麼小的變化......感謝您的幫助,真的很感激! – Chaddeus

相關問題