Генерация случайных данных в двух таблицах с соотношением 1: M с большим количеством ячеек уникальных данных во второй таблице в PostgreSQL - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть две таблицы: first_table и other_table.Я генерирую 3 строки случайных данных в столбце pr_key в first_table.first_table и other_table имеют отношение 1: M.

Для каждого pr_key в other_table мне нужно снова генерировать случайные числа в столбце second_code, чтобы всего было 9 строк.

Проблема с моим подходом заключается в том, что случайные числа в столбце second_code повторяются для каждого pr_key, но они должны быть разными.

Кроме того, в other_tableесть ограничение, которое проверяет, что пары pr_key и second_code являются уникальными.

with oper as (
INSERT INTO first_table(
    pr_key,
)
SELECT
    pr_key,
FROM (
    SELECT(
        SELECT (random()*10)::int+(gen*0) as pr_key
    ),
    gen as id
    FROM generate_series(1,3) as gen
    ) main
RETURNING pr_key)    
INSERT INTO other_table(pr_key, second_code) 
SELECT pr_key, second_code
FROM oper, (
    SELECT
   (
        SELECT 1+(random()*10)::int+(gen*0) as second_code
   ),
    gen as id
    FROM generate_series(1,3) as gen
   ) AS gener

1 Ответ

0 голосов
/ 20 декабря 2018

Попробуйте использовать следующий синтаксис:

CREATE TABLE t1 (pr_key int);
CREATE TABLE t2 (pr_key int, second_code int);
with c1 as
(
    insert into t1 
    select pr_key
    from (
           select (select (random()*10)::int+(gen*0) as pr_key),
           gen as id
           from generate_series(1,3) as gen
         ) t
    returning pr_key
)
insert into t2 (pr_key, second_code)
select pr_key, (select (random()*10)::int+(id*0))
from c1, (select gen as id from generate_series(1,3) as gen) t2
select * from t1;
| pr_key |
| -----: |
|      2 |
|      7 |
|      9 |
select * from t2;
pr_key | second_code
-----: | ----------:
     2 |           5
     2 |           7
     2 |           1
     7 |           4
     7 |           0
     7 |           3
     9 |           4
     9 |          10
     9 |           2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...