如何强制oracle对每一行执行子查询?

Z.S*_*mon 1 sql oracle

我有两个表,我想从第二个表中为第一个表中的每条记录选择随机值。问题是,似乎每行的这个值总是相同的,这意味着它只对所有行执行一次。我怎样才能做到这一点?

create table first_table(name varchar2(100));
insert into first_tablevalues('John');
insert into first_tablevalues('Jessie');
insert into first_tablevalues('Jack');

select * from second_table;
create table second_table(id number);
insert into second_table(id) values(1);
insert into second_table(id) values(2);
insert into second_table(id) values(3);
insert into second_table(id) values(4);
insert into second_table(id) values(5);
insert into second_table(id) values(6);
Run Code Online (Sandbox Code Playgroud)

然后我执行了这个查询,但是对于第一个表中的每个名称,我得到了相同的数字。

SELECT NAME,
       (SELECT id
          FROM (SELECT id
                  FROM second_table
                 ORDER BY dbms_random.value)
         WHERE rownum = 1)
  FROM first_table;
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 5

相关子句解决了这个问题:

SELECT NAME,
       (SELECT id
        FROM (SELECT id
              FROM second_table st
              ORDER BY dbms_random.value
             )
        WHERE rownum = 1 AND ft.name IS NOT NULL
       )
FROM first_table ft;
Run Code Online (Sandbox Code Playgroud)

是一个reextester。