В настоящее время у меня есть таблица, которая выглядит так:
| A_URN | B_URN | ID |
|-------|-------|----|
| 101 | 901 | 0 |
|-------|-------|----|
| 102 | 901 | 0 |
|-------|-------|----|
| 101 | 902 | 0 |
|-------|-------|----|
| 102 | 902 | 0 |
|-------|-------|----|
| 201 | 902 | 0 |
|-------|-------|----|
| 201 | 903 | 0 |
|-------|-------|----|
| 202 | 903 | 0 |
|-------|-------|----|
| 301 | 904 | 0 |
|-------|-------|----|
| 302 | 904 | 0 |
|-------|-------|----|
| 301 | 905 | 0 |
|-------|-------|----|
| 302 | 905 | 0 |
|-------|-------|----|
| 303 | 905 | 0 |
|-------|-------|----|
| 101 | 906 | 0 |
Мне нужно добавить идентификатор, который группирует все связанные элементы вместе.
Например, A_URN 101 подключен к B_URN 901, 902 и 906, а B_URN 901, 902 и 906 также содержат A_URN 102 и 201.
A_URN 201 также подключен к B_URN 903 и т.д. и т.п.
Конечный результат должен выглядеть примерно так:
| A_URN | B_URN | ID |
|-------|-------|----|
| 101 | 901 | 1 |
|-------|-------|----|
| 102 | 901 | 1 |
|-------|-------|----|
| 101 | 902 | 1 |
|-------|-------|----|
| 102 | 902 | 1 |
|-------|-------|----|
| 201 | 902 | 1 |
|-------|-------|----|
| 201 | 903 | 1 |
|-------|-------|----|
| 202 | 903 | 1 |
|-------|-------|----|
| 301 | 904 | 2 |
|-------|-------|----|
| 302 | 904 | 2 |
|-------|-------|----|
| 301 | 905 | 2 |
|-------|-------|----|
| 302 | 905 | 2 |
|-------|-------|----|
| 303 | 905 | 2 |
|-------|-------|----|
| 101 | 906 | 1 |
Я написал запрос, который выполняет это с помощью цикла WHILE(), но меня попросили переработать его в рекурсивное CTE. Я пытался, но всегда в конечном итоге нужно использовать MIN или GROUP BY внутри рекурсивного члена, что не разрешено.
Можно ли получить такой результат с помощью рекурсивного запроса?