вставлять случайные строки из списка с помощью sql - PullRequest
0 голосов
/ 09 апреля 2019

Я создал такую ​​таблицу: region (id, name) и хочу вставить в эту таблицу несколько строк, имя должно быть выбрано случайным образом из списка, например ['east', 'west'], как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Это решение Oracle. Первый подзапрос генерирует десять случайных целых чисел от 1 до 3, используя синтаксис Oracle CONNECT BY. Второй подзапрос связывает имя региона с числом от 1 до 3. Они объединяются в основном запросе для заполнения таблицы:

insert into region (id, name)
with rnd as (
     select level as lvl, round(DBMS_RANDOM.VALUE(0.5,3.4999999999), 0) as rnd
     from dual
     connect by level <= 10
 ) , regn as (  
    select 1 as rno, 'west' as rname from dual union all
    select 2 as rno, 'east' as rname from dual union all
    select 3 as rno, 'north' as rname from dual
)
select rnd.lvl
       , regn.rname
from rnd
     join regn on rnd.rnd = regn.rno
/
0 голосов
/ 09 апреля 2019

Вставьте 10 случайных строк с помощью ...

Oracle:

INSERT INTO region(name)
SELECT rndm.name 
  FROM (SELECT 1 n
          FROM dual
       CONNECT BY LEVEL <= 365
     ) gen
 CROSS 
  JOIN (SELECT 'west' name FROM dual
         UNION ALL
        SELECT 'east' FROM dual
         UNION ALL
        SELECT 'north' FROM dual
     ) rndm
 WHERE rownum <= 10
 ORDER BY DBMS_RANDOM.VALUE

SQL Server:

INSERT INTO region (name)
SELECT TOP 10 rndm.name
  FROM sys.all_objects a1
 CROSS
  JOIN (VALUES ('east'),
               ('west')) rndm(name)
 ORDER BY CHECKSUM(NEWID())

MySQL:

INSERT INTO region (name)
SELECT rndm.name
  FROM information_schema.columns v
 CROSS
  JOIN (SELECT 'east' as name UNION ALL
        SELECT 'west') rndm
 ORDER BY RAND()
 LIMIT 10

Postgres:

 INSERT INTO region(NAME)
 SELECT unnest(ARRAY['west','east'])
   FROM generate_series(1, 100)
  ORDER BY random()
  LIMIT 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...