使用大量链接/连接一次迭代1行

时间:2009-10-07 18:29:33

标签: sql-server join iteration row-number

好的,基本上需要的是一种在使用大量连接时使用行号并使用这些rownumber的where子句的方法。

,例如

select ADDRESS.ADDRESS FROM ADDRESS 
INNER JOIN WORKHISTORY ON WORKHISTORY.ADDRESSRID=ADDRESS.ADDRESSRID
INNER JOIN PERSON ON PERSON.PERSONRID=WORKHISTORY.PERSONRID
WHERE PERSONRID=<some number> AND WORKHISTORY.ROWNUMBER=1

虽然需要在该表上为此查询生成ROWNUMBER。因此,如果我们想要访问第二个WORKHISTORY记录的地址,我们可以去WORKHISTORY.ROWNUMBER=2,如果我们有两个匹配的地址,我们可以使用ADDRESS.ROWNUMBER=1和{循环遍历一个WORKHISTORY记录的地址{1}}

这应该是一个自动生成的查询。因此,为了进入相关表,可能有超过10个内连接,并且我们需要能够独立于其余表循环遍历每个表的记录。

我知道有RANK和ROWNUMBER函数,但我没有看到它对我的影响因为所有的内连接

注意:在此示例查询中,应自动生成ROWNUMBER!它永远不应该存储在实际的表中

1 个答案:

答案 0 :(得分:1)

你能使用临时表吗?

我问,因为你可以写这样的代码:

select a.field1, b.field2, c.field3, identity (int, 1,1)  as TableRownumber into #temp
from table1 a 
join table2 b on a.table1id = b.table1id
join table3 c on b.table2id = c.table2id

select * from #temp where ...