У меня есть связанная группа связанных записей и их отношение. К сожалению, не все крысы ios захвачены, но скорее они могут быть получены от других крыс ios. Как и в случае, мне может потребоваться соотношение A -> D, но у меня нет прямого отношения, к которому можно обратиться, но я могу вывести его из приведенного ниже примера, взяв соотношение A -> C (0,5), а затем C -> D (3), поэтому 0,5 * 3 = 1,5. ИЛИ Я мог бы вывести В путем инвертирования отношения A-> B (1/2 = 0,5), а затем взять соотношение A -> C (0,5) для этого (1/2) * 0,5 = 0,25 и так далее, и так далее.
Например,
FROM_UNIT_ID TO_UNIT_ID RATIO
A B 2
A C 0.5
C D 3
Я хочу вычислить полный список всех возможных путей и их крыс ios, как показано ниже.
FROM_UNIT_ID TO_UNIT_ID RATIO
A B 2
A C 0.5
C D 3
A D 1.5
B C 0.25
B D 0.75
B A 0.5
C A 2
C B 4
D A 0.666666667
D B 1.333333333
D C 0.333333333
Используя следующий вопрос переполнения стека Я смог вывести всех братьев и сестер в рационе, чтобы получить список возможных путей, но я не смог адаптировать этот запрос для вычисления крысы ios. Я использую Oracle 11 г.
SELECT
CONNECT_BY_ROOT( FROM_UNIT_ID ) AS FROM_UNIT_ID,
TO_UNIT_ID
FROM (
SELECT FROM_UNIT_ID, TO_UNIT_ID, RATIO FROM RATIOS
UNION
SELECT TO_UNIT_ID, UNIT_ID, 1/RATIO AS RATIO FROM RATIOS
)
WHERE CONNECT_BY_ROOT( FROM_UNIT_ID ) <> TO_UNIT_ID
CONNECT BY NOCYCLE
PRIOR TO_UNIT_ID = FROM_UNIT_ID
ORDER BY FROM_UNIT_ID, TO_UNIT_ID;