Обновление Oracle со случайного на другом столе - PullRequest
0 голосов
/ 09 октября 2018

У меня есть несколько полей в таблице1 для обновления со случайными значениями из некоторых полей в таблице 2.

Я должен случайным образом разбить строки в таблице 2 и обновить каждую строку таблицы1 такими же значениями строк таблицы 2.

Вот мой SQL-код, но он не работает.

update owner.table1 t1
  set (t1.adress1, t1.zip_code, t1.town) = (select t2.adress, t2.zip_code, t2.town 
                                            from table1 t2 
                                            where id = trunc(dbms_random.value(1,20000)))

Результат: все строки обновляются с одинаковыми значениями, как без случайных в таблице 2 строки

1 Ответ

0 голосов
/ 10 октября 2018

Как насчет переключения на аналитическую функцию ROW_NUMBER?На самом деле он не создает random значение, но может быть достаточно хорошим.

Вот пример: сначала создайте тестовые таблицы и вставьте некоторые данные:

SQL> create table t1 (id number,address varchar2(20), town varchar2(10));

Table created.

SQL> create table t2 (id number, address varchar2(20), town varchar2(10));

Table created.

SQL> insert into t1
  2    select 1, 'Ilica 20', 'Zagreb' from dual union all
  3    select 2, 'Petrinjska 30', 'Sisak' from dual union all
  4    select 3, 'Stradun 12', 'Dubrovnik' from dual;

3 rows created.

SQL> insert into t2
  2    select 1, 'Pavelinska 15', 'Koprivnica' from dual union all
  3    select 2, 'Baščaršija 11', 'Sarajevo' from dual union all
  4    select 3, 'Riva 22', 'Split' from dual;

3 rows created.

SQL> select * From t1 order by id;

        ID ADDRESS              TOWN
---------- -------------------- ----------
         1 Ilica 20             Zagreb
         2 Petrinjska 30        Sisak
         3 Stradun 12           Dubrovnik

SQL> select * From t2 order by id;

        ID ADDRESS              TOWN
---------- -------------------- ----------
         1 Pavelinska 15        Koprivnica
         2 Baščaršija 11        Sarajevo
         3 Riva 22              Split

Обновить t1 строками из t2:

SQL> update t1 set
  2    (t1.address, t1.town) =
  3    (select x.address, x.town
  4     from (select row_number() over (order by address) id, t2.address, t2.town
  5           from t2
  6          ) x
  7     where x.id = t1.id);

3 rows updated.

SQL> select * From t1 order by id;

        ID ADDRESS              TOWN
---------- -------------------- ----------
         1 Baščaršija 11        Sarajevo
         2 Pavelinska 15        Koprivnica
         3 Riva 22              Split

SQL>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...