sql如何使用行号进行内连接

时间:2015-02-22 17:38:40

标签: sql sql-server rownum

我正在尝试使用dapper MSSQL对行号进行内连接,并且我不断收到此异常其他信息:'threadem 多次指定了列'id'。我有2个表格线程和拉链,它们都有一个主键 id 我不知道是否与它有关,这是我的代码

SELECT z.*,
       t.*
FROM   (SELECT ROW_NUMBER() OVER (ORDER BY t.activities DESC) AS Row,
               z.*,
               t.*
        FROM   threads t
               INNER JOIN zips z
                 ON z.city = @Ucity
                    AND z.state = @Ustate
        WHERE  t.latitudes >= z.ThirtyLatMin
               AND z.ThirtyLatMax >= t.latitudes
               AND t.longitudes >= z.ThirtyLonMin
               AND z.ThirtyLonMax >= t.longitudes) AS threadem
WHERE  ROW >= 1
       AND Row <= 5 

我可以在上面修复什么来阻止此错误

1 个答案:

答案 0 :(得分:0)

首先,如果您使用的是SQL Server 2012+,则可以使用fetch first . . . offset语法。这比行号更方便。

解决问题的最佳方法是明确列出所需的所有列。然后,如果表中的两列具有相同的名称,请使用别名重命名它们。类似的东西:

SELECT t.*
FROM   (SELECT ROW_NUMBER() OVER (ORDER BY t.activities DESC) AS Row,
               z.zcol1, z.zcol2, . . .,
               t.tcol1, t.zcol2, . . 
        FROM threads t INNER JOIN
             zips z
             ON z.city = @Ucity AND z.state = @Ustate
        WHERE t.latitudes >= z.ThirtyLatMin AND
              z.ThirtyLatMax >= t.latitudes AND
              t.longitudes >= z.ThirtyLonMin AND
              z.ThirtyLonMax >= t.longitudes
      ) t
WHERE ROW >= 1 AND Row <= 5 ;

如果您不希望row作为外部查询中的返回列,那么您需要列出 想要的所有列在外部{{1 }}