2016-01-24 3 views
1

У меня есть 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

Является "DATA1 от T2 в случайном порядке" достаточно случайным? Или вам нужно что-то еще? – Deltharis

+0

Вы хотите перетасовать данные из колонки 'DATA1'? – Dmitry

ответ

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 возвращают перемешиваются значения t3.data1 столбца (значения упорядочиваются по dbms_random.value), то оба подзапроса объединяются в один. Подзапрос

select rownum from dual connect by level <= 200 

Используется для умножения строк. Если таблица t3 содержит 15 строк, то результат объединения с умножением подзапроса производит 3000 строк, где каждая строка из t3 будет повторяться 200 раз. Чтобы умножить на другое значение, поместите его в запрос вместо 200.

+0

спасибо @Dmitry, я полностью забыл, что у меня есть 3-я таблица, из которой мне нужны эти случайные значения. Я отредактировал мой пост, не могли бы вы отредактировать свой ответ тоже? Я смотрю ваше сообщение и пытаюсь выяснить, как его достичь –

+0

этот запрос возвращает результаты только по количеству строк из T3. Мой T1 пуст, T2 имеет 3000 строк, а T3 имеет 15 строк. и этот запрос возвращает только 15 строк со случайными значениями из T3 и значениями из T2. –

+0

@mauekunak Вы не упомянули об этом раньше. Итак, что нужно делать со значениями 'T2' и' T3'? Повторите «T3» значения 200 раз (чтобы произвести 3000 строк) или вырезать 'T2'? – Dmitry

Смежные вопросы