Запрос слияния для распределения равного количества записей между 100 пользователями - PullRequest
0 голосов
/ 14 февраля 2020

У меня две таблицы в Oracle, в первой таблице 100 пользователей, а во второй - 100000 записей. Я хочу распределить равное количество записей между ними .....

Вместо того, чтобы писать обновление и использовать rownum <= 1000 для распространения данных .... Я хочу написать оператор слияния, который может делить равное количество записей между 100 пользователями. </p>

Таблица 1

column A Column B  column c
  1       Pre      90008765
  2      Pre      90008766 and so on like this 

Таблица 2

column a Column B column C Column d 
1         null     null    null
2          null    null    null 
And so on will have 100000 records 

и между этими двумя таблицами будет распространен столбец a, в котором мы можем применить условие соединения ..... направьте меня с запросом на слияние

1 Ответ

0 голосов
/ 14 февраля 2020

Если я правильно понимаю эти слова "написать оператор слияния, который может разделить равное количество записей между 100 пользователями" , вам нужно:

merge into table2 tgt
using (
select tb.rwd, ta.a 
  from (select rownum rn, a, b, c, count(1) over () cnt from table1) ta
  join (select rowid rwd, rownum rn, a, b, c, d from table2) tb
    on mod(ta.rn, cnt) = mod(tb.rn, cnt)) src
on (tgt.rowid = src.rwd)
when matched then update set a = src.a

dbfiddle

Этот оператор присваивает строки от T1 строкам в T2 в последовательности 1-2-3 -...- 1-2-3 -... , используя функцию mod(). Конечно, вы можете обновить другие столбцы, если вам нужно, не только A.

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