Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将所有值与随机值一起插入_Sql_Random_Plsql - Fatal编程技术网

Sql 将所有值与随机值一起插入

Sql 将所有值与随机值一起插入,sql,random,plsql,Sql,Random,Plsql,我有三张桌子: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 r

我有三张桌子: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行。

此子查询

SELECT DATA1 
FROM (SELECT DATA1 
      FROM T2
      ORDER BY dbms_random.value)
    WHERE rownum = 1
只返回一行,然后在表
T2
包含行时重复该行。这就是我们的查询不起作用的原因。
要以随机顺序插入值(如果我理解您的需要):


用于将行相乘。如果
t3
表包含15行,则子查询相乘的联接结果将产生3000行,其中来自
t3
的每一行将重复200次。要乘以另一个值,将其放入查询中,而不是
200

“T2中的数据以随机顺序”是否足够随机?或者您还需要其他内容吗?您想从
DATA1
列中洗牌数据吗?谢谢@Dmitry,我完全忘了我有第三个表,我需要从中获得这些随机值。我编辑了我的帖子,请你也编辑一下你的答案好吗?我正在看你的帖子,试图找出如何实现它。这个查询只返回T3中的行数。我的T1是空的,T2有3000行,T3有15行。这个查询只返回15行,其中包含来自T3的随机值和来自T2的随机值。@mauekunak,您以前没有提到过这一点。那么,需要如何处理
T2
T3
的值呢?重复
T3
值200次(产生3000行)或切割
T2
?T3井有主键。我认为行数不必相同,只要将T3.DATA1中的任意随机值放入T1.DATA1即可。如果我们需要重复3000行,那么是的,这就是我想要的need@mauekunak再次更新
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
select rownum from dual connect by level <= 200