Я генерирую некоторые тестовые данные и использую dbms_random
. При использовании dbms_random
в состоянии JOIN
я столкнулся со странным поведением, которое я не могу объяснить:
------------------------# test-data (ids 1 .. 3)
With x As (
Select Rownum id From dual
Connect By Rownum <= 3
)
------------------------# end of test-data
Select x.id,
x2.id id2
From x
Join x x2 On ( x2.id = Floor(dbms_random.value(1, 4)) )
Floor(dbms_random.value(1, 4) )
возвращает случайное число из (1,2,3), поэтому я ожидал бы, что все строки из x
будут соединены со случайной строкой из x2
, или, возможно, всегда одна и та же случайная строка из x2
если случайное число оценивается только один раз.
При попытке несколько раз я получаю такие результаты:
(1) ID ID2 (2) ID ID2 (3)
---- ---- ---- ---- no rows selected.
1 2 1 3
1 3 2 3
2 2 3 3
2 3
3 2
3 3
Чего мне не хватает?
EDIT
SELECT ROWNUM, FLOOR(dbms_random.VALUE (1, 4))
FROM dual CONNECT BY ROWNUM <= 3
получит результат в этом случае, но почему исходный запрос ведет себя так?