Как вставить несколько строк, используя PL / SQL select - PullRequest
0 голосов
/ 28 августа 2018

так что я хочу оптимизировать процесс вставки множества строк в одну таблицу.

У меня есть два оператора выбора -

 one generates 800 rows (x) 
 another one 150 rows (y).

Я хочу ВСТАВИТЬ в значения таблицы (x, y), чтобы для каждого x было все 150 строк из x2, то есть всего должно быть 120 000 записей.

Значение:

x1-y1
x1-y2
x1-...
x1-y150
..
x800-y1
x800-y2
...
x800-y150

Я не могу понять, что это, и я уверен, что это действительно просто.

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Вам просто нужно сделать следующее (без каких-либо условий соединения), чтобы создать декартово произведение двух таблиц:

insert into <target_table>
select x.*, y.*
from x, y;
0 голосов
/ 28 августа 2018

Скажите, это таблица, в которую вы хотите вставить:

SQL> create table yourTable (x varchar2(10), y varchar2(10));

Table created.

и у вас уже есть два запроса, дающих некоторые результаты:

SQL> select 'x_' || level as x
  2  from dual
  3  connect by level <= 3;

X
------------------------------------------------------------------------
x_1
x_2
x_3

SQL> select 'y_' || level as y
  2  from dual
  3  connect by level <= 2;

Y
------------------------------------------------------------------------
y_1
y_2

Возможно, вам понадобится вставить как выберите, используя cross join для ваших запросов:

SQL> insert into yourTable(x, y)
  2  select x, y
  3  from (
  4          select 'x_' || level as x
  5          from dual
  6          connect by level <= 3
  7       ) table_X
  8       CROSS JOIN
  9       (
 10          select 'y_' || level as y
 11          from dual
 12          connect by level <= 2
 13       ) table_Y;

6 rows created.

Результат:

SQL> select * from yourTable;

X          Y
---------- ----------
x_1        y_1
x_1        y_2
x_2        y_1
x_2        y_2
x_3        y_1
x_3        y_2

6 rows selected.
...