Почему этот «пейджинговый» запрос выдает ошибку «не совпадает с именем таблицы или псевдонимом»? - PullRequest
1 голос
/ 30 августа 2011

Предупреждение, «некрасивое» предупреждение о запросе (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

Этот запрос выдает эту ошибку:

Префикс столбца «BaseDocs» не совпадает с именем таблицы или псевдонимом имя, используемое в запросе.

Этот запрос относится к этим таблицам:

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

DocCategories Table
 - CatId PK
 - ...

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

После "взлома" этого запроса, я думаю, мой мозг жарен ... но он близко, я это чувствую Заранее спасибо!

1 Ответ

3 голосов
/ 30 августа 2011

Только не указывайте псевдоним таблицы в вашем 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.* .....
...