0

好的,基本上需要的是一种在使用大量连接的同时获得行号的方法,并且在 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 记录的地址ADDRESS.ROWNUMBER=2

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

我知道有 RANK 和 ROWNUMBER 函数,但由于所有内部连接,我看不到它对我的工作方式

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

4

1 回答 1

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 ...
于 2009-10-07T18:38:05.700 回答