Итерация по 1 строке за раз с огромным количеством ссылок / объединений - PullRequest
0 голосов
/ 07 октября 2009

Хорошо, в принципе, нужен способ иметь номера строк при использовании большого количества объединений и иметь предложения 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 и, если скажем, что у нас есть два совпадающих адреса, мы могли бы циклически проходить через адреса для одной записи WORKHISTORY, используя ADDRESS.ROWNUMBER=1 и ADDRESS.ROWNUMBER=2

Это должно быть автоматически сгенерированным запросом. Таким образом, для доступа к соответствующей таблице может быть более 10 внутренних объединений, и нам необходимо иметь возможность циклически проходить по каждой записи таблицы независимо от остальных таблиц.

Я знаю, что есть функции RANK и ROWNUMBER, но я не вижу, как это будет работать для меня из-за всех внутренних соединений

примечание: в этом примере запроса ROWNUMBER должен генерироваться автоматически! Он никогда не должен храниться в фактической таблице

1 Ответ

1 голос
/ 07 октября 2009

Можете ли вы использовать временную таблицу?

Я спрашиваю, потому что вы можете написать код так:

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 ...
...