ランダムに1つのテーブルから値を選択する必要があります。 tableA.a_id
はVARCHAR2
であり、この値を使用して別のテーブルに挿入します。むしろからランダムに行を選ぶよりも、しかしOracleのランダムな行を選択
insert into tableX
select
rownum,
dbms_random.value(100,999), 0),
(select a_id from
(
SELECT a_id
FROM tableA
ORDER BY dbms_random.value
)
where rownum = 1)
from
(select level from dual connect by level <= 100);
:例えば、3つの列を想定するtableX
の100行(配列番号100および999、およびtableA.a_id
の値の間の乱数)に挿入する必要があります私は繰り返しサブクエリを実行した場合、私は、例えば(明白な理由ため)新しい値を毎回取得する、しかし
1 129 A-ID-48
2 849 A-ID-48
3 367 A-ID-48
:各行についてtableA.a_id
は、それは例えば、すべての行に対して同じ値を選択します。
select a_id from
(
SELECT a_id
FROM tableA
ORDER BY dbms_random.value
)
where rownum = 1;
結果は、各実行後に次のようになります。
A-ID-7
A-ID-48
A-ID-74
私はそれがtableA
年代a_id
列からランダムに行を挿入するだろう、元のクエリを変更する、またはそのことについては新しいものを考え出すにはどうすればよい 各挿入行の宛先テーブルに?欲望の結果:
1 129 A-ID-7
2 849 A-ID-48
3 367 A-ID-74
mathguy answerに基づいて更新1
、私は、単一のテーブル選択のためのクエリを更新:
insert into tableX
select
rownum,
round(dbms_random.value(100,999), 0),
a_id
from
(
select
round(dbms_random.value(1, (select count(*) from tableA)), 0) tableX_rand_num
from tableX
) x
join
(
select
a_id,
dbms_random.value() rnd,
rownum tableA_rownum
from tableA
order by rnd
) a
on x.tableX_rand_num = a.tableA_rownum
where rownum <= 100;
制限:これを使用して挿入された行の数をメソッドは、親テーブル(tableX
)で利用可能な番号レコードとは独立していません。換言すれば、利用可能な合計行数はtableX
のレコード数だけ挿入できます。例えばtableX
にレコードが200あり、1000を挿入する場合は、上記のクエリで最大200行まで挿入できます。
私は非常にあなたのロジックを以下のいませんよ。どのインナークエリーを交換する必要がありますか? 1つのレコードだけを返すために、最初の内部クエリに 'rownum = 1'が必要なのですか? – NuCradle
完全なクエリを回答に追加する方が簡単でした。上記をご覧ください。 – mathguy
変更があったとは思わない: – NuCradle