Je génère des données de test et utilise dbms_random
. Je rencontrais un comportement étrange lors de l'utilisation dbms_random
dans l'état de la JOIN
, que je ne peux pas expliquer:Utilisation de la valeur aléatoire comme condition de jointure
------------------------# 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))
retourne un nombre aléatoire sur (1,2,3), donc je me serais attendu toutes les lignes de x
à joindre avec une ligne aléatoire de x2
, ou peut-être toujours la même ligne aléatoire de x2
dans le cas où le nombre aléatoire est évalué une seule fois.
Lorsque vous essayez plusieurs fois, j'obtenir des résultats comme ça, si:
(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
Qu'est-ce que je manque?
EDIT:
SELECT ROWNUM, FLOOR(dbms_random.VALUE (1, 4))
FROM dual CONNECT BY ROWNUM <= 3
obtiendrait le résultat dans ce cas, mais pourquoi la requête initiale se comporter comme ça?
Merci, cela pourrait se faire encore plus facile, voir ma question mise à jour. Je me demandais pourquoi les résultats de ma requête sont si étranges, cependant ... Une idée? –