SQL-запрос на основе ROW_Number не работает - PullRequest
2 голосов
/ 18 ноября 2010

В основном я пытаюсь сделать запрос к странице, которая содержит только изображение.Мне нужно предоставить номер tripID, а затем ROWID (так как может быть несколько изображений), чтобы получить одно изображение.Я буду зацикливаться, пока каждое изображение не будет в соответствующем окне изображения в формате html.

Этот код не работает (я получаю неверное имя столбца 'ROWID'), но если я удалю AND ROWID = '1 'возвращает все изображения и идентификатор строки следующим образом:

ROWID      PHOTO
    1      32jjr3h2jh23hj4h32jh42ll23j42 
    2       HU8308DJAOID9ASIDJI32C89EE29

-

Select ROW_NUMBER() OVER (ORDER BY Photo ASC) AS ROWID, TBL_Photo.Photo
        From TBL_Photo
        left join TBL_TripDetails
        ON TBL_Photo.TripID=TBL_TripDetails.pkiTripID
        Where pkiTripID = '121' AND ROWID = '1'

1 Ответ

5 голосов
/ 18 ноября 2010

Нельзя ссылаться на псевдоним столбца в предложении WHERE - необходимо использовать подзапрос или CTE:

Пример подзапроса:

SELECT x.rowid,
       x.photo
  FROM (SELECT ROW_NUMBER() OVER (ORDER BY p.photo) AS ROWID, 
               p.photo
          FROM TBL_PHOTO p
     LEFT JOIN TBL_TRIPDETAILS td ON td.pkitripid = p.tripid 
         WHERE td.pkiTripID = '121') x
 WHERE x.rowid = 1

Пример CTE:

WITH example AS (
        SELECT ROW_NUMBER() OVER (ORDER BY p.photo) AS ROWID, 
               p.photo
          FROM TBL_PHOTO p
     LEFT JOIN TBL_TRIPDETAILS td ON td.pkitripid = p.tripid 
         WHERE td.pkiTripID = '121')
SELECT x.rowid,
       x.photo
  FROM example x
 WHERE x.rowid = 1

Производительность

Разницы в производительности между этими двумя параметрами нет, но синтаксис WITH поддерживается не во всех базах данных.

...