代码之家  ›  专栏  ›  技术社区  ›  Spooks

基于行号的SQL查询不起作用

  •  2
  • Spooks  · 技术社区  · 14 年前

    基本上,我试图对只保存图像的页面进行查询。我需要提供tripID编号,然后ROWID(因为可能有多个图像)来接收单个图像。我将循环,直到每个图像都在其相应的html图像框中。

    此代码似乎不起作用(我得到的列名“row id”无效),但如果删除和ROWID='1',它将返回所有图像及其行id,如下所示:

    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 回复  |  直到 14 年前
        1
  •  5
  •   OMG Ponies    14 年前

    不能在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语法。