sql 如何使用行号进行内部连接
sql how to do an inner join with row number
我正在尝试使用 dapper MSSQL 对行号进行内部联接,但我不断收到此异常 其他信息:为 'threadem[=18] 多次指定了列 'id' =]。我有 2 个表 threads 和 zips,它们都有一个主键 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
我可以在上面修复什么以停止收到此错误
首先,如果您使用的是 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
作为外部查询中的返回列,那么您需要列出您 想要在外部查询中的所有列select
.
我正在尝试使用 dapper MSSQL 对行号进行内部联接,但我不断收到此异常 其他信息:为 'threadem[=18] 多次指定了列 'id' =]。我有 2 个表 threads 和 zips,它们都有一个主键 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
我可以在上面修复什么以停止收到此错误
首先,如果您使用的是 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
作为外部查询中的返回列,那么您需要列出您 想要在外部查询中的所有列select
.