我有3张桌子:T1,T2和T3 我正试图将数据插入T1,如下所示:
T1.DATA1 = random values from T3.DATA1
T1.DATA2 = T2.DATA2
T1.DATA3 = T2.DATA3
我试过这个问题:我试过这个问题:
INSERT INTO T1 (DATA1, DATA2, DATA3)
SELECT (SELECT DATA1 FROM
(SELECT DATA1 FROM T3
ORDER BY dbms_random.value)
WHERE rownum = 1), DATA2, DATA3
FROM T2;
它会将正确的值返回给DATA2
和DATA3
,但在DATA1
中,我在所有行中都有一个生成的随机值。如何修改此查询以在每一行中包含随机值? T2
包含大约3000行。
答案 0 :(得分:1)
此子查询
SELECT DATA1
FROM (SELECT DATA1
FROM T2
ORDER BY dbms_random.value)
WHERE rownum = 1
只返回一行,然后重复多次,因为表T2
包含行。这就是为什么我们的查询不起作用的原因
以随机顺序插入值(如果我理解你需要的话):
INSERT INTO T1 (DATA1, DATA2, DATA3)
select tt.data1, t.data2, t.data3
from (select t2.data2, t2.data3, rownum rn
from t2) t,
(select data1, row_number() over (order by dbms_random.value) rn
from t3,
(select rownum from dual connect by level <= 200) m) tt
where t.rn = tt.rn
一些解释:子查询t
返回data2
表的data3
和t2
列的值,子查询tt
返回值为{{1}的混洗值} column(值由dbms_random.value排序),然后两个子查询合并为一个。子查询
t3.data1
用于乘以行。如果select rownum from dual connect by level <= 200
表包含15行,则使用乘法子查询的连接结果将生成3000行,其中t3
的每一行将重复200次。要乘以另一个值,请将其放在查询中,而不是t3
。