Sql 使用随机值作为连接条件

Sql 使用随机值作为连接条件,sql,oracle,join,random,Sql,Oracle,Join,Random,我正在生成一些测试数据并使用dbms\u random。在JOIN条件下使用dbms\u random时,我遇到了一些奇怪的行为,我无法解释: ------------------------# test-data (ids 1 .. 3) With x As ( Select Rownum id From dual Connect By Rownum <= 3 ) ------------------------# end of test-data Select x.id,

我正在生成一些测试数据并使用
dbms\u random
。在
JOIN
条件下使用
dbms\u random
时,我遇到了一些奇怪的行为,我无法解释:

------------------------# 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)) )
我错过了什么

编辑

SELECT ROWNUM, FLOOR(dbms_random.VALUE (1, 4))
FROM dual CONNECT BY ROWNUM <= 3
选择ROWNUM,FLOOR(dbms_random.VALUE(1,4))

从dual CONNECT BY ROWNUM生成三行,其中一行为可预测值,另一行为随机值,请尝试以下操作:

SQL> with x as (
  2    select rownum id from dual
  3    connect by rownum <= 3
  4      )
  5      , y as (
  6    select floor(dbms_random.value(1, 4)) floor_val
  7    from dual
  8      )
  9  select x.id,
 10         y.floor_val
 11  from x
 12  cross join y
 13  /

        ID  FLOOR_VAL
---------- ----------
         1          2
         2          3
         3          2

SQL
SQL>使用x作为(
2从“双”菜单中选择rownum id

3通过rownum连接谢谢,这可能会更容易,请参阅我的更新问题。我想知道为什么我的查询结果如此奇怪,但是…有什么想法吗?
SQL> with x as (
  2    select rownum id from dual
  3    connect by rownum <= 3
  4      )
  5      , y as (
  6    select floor(dbms_random.value(1, 4)) floor_val
  7    from dual
  8      )
  9  select x.id,
 10         y.floor_val
 11  from x
 12  cross join y
 13  /

        ID  FLOOR_VAL
---------- ----------
         1          2
         2          3
         3          2

SQL