Ввод всех данных из таблицы (T2) вставка в таблицу (T1) для каждой строки T1

#sql #oracle #oracle11g

#sql #Oracle #oracle11g

Вопрос:

У меня есть таблица T1, в которой есть 3 столбца date, id, name У меня есть другая таблица T2, в которой есть ID, Name Я хочу поместить все данные T2 в T1 agt для каждой даты следующим образом

            T1                               T2               Required output of T1
DATE          ID       NAME     || ID           NAME   ||DATE        ID    NAME 
02/16/21                        || 100          Shaun  ||02/16/21    100   Shaun
02/15/21                        || 101          Alex   ||02/16/21    101   Alex
02/14/21                        || 102          Scott  ||02/16/21    102   Scott
                                                  
 

это будет повторяться для каждой даты, пожалуйста, помогите и зафиксируйте в T1

Ответ №1:

Для меня это выглядит так, как будто вы хотите перекрестно соединить эти две таблицы.

В настоящее время у вас есть это:

 SQL> select * from t1;

DATUM              ID NAME
---------- ---------- --------------------
02/16/2021
02/15/2021
02/14/2021

SQL> select * from t2;

        ID NAME
---------- -----
       100 Shaun
       101 Alex
       102 Scott
 

Вывод, который вы хотите:

 SQL> select a.datum, b.id, b.name
  2  from t1 a cross join t2 b
  3  order by a.datum, b.id;

DATUM              ID NAME
---------- ---------- -----
02/14/2021        100 Shaun
02/14/2021        101 Alex
02/14/2021        102 Scott
02/15/2021        100 Shaun
02/15/2021        101 Alex
02/15/2021        102 Scott
02/16/2021        100 Shaun
02/16/2021        101 Alex
02/16/2021        102 Scott

9 rows selected.

SQL>
 

Если вы хотите заполнить t1 таблицу с таким результатом, я бы сказал, что самый простой вариант — сделать это в два этапа: insert delete :

  • сначала вставьте результат перекрестного соединения
  • затем удалите строки, которые id пусты

Что-то вроде этого:

 SQL> insert into t1 (datum, id, name)
  2  select a.datum, b.id, b.name
  3  from t1 a cross join t2 b;

9 rows created.

SQL> delete from t1 where id is null;

3 rows deleted.

SQL> select * from t1;

DATUM              ID NAME
---------- ---------- --------------------
02/16/2021        100 Shaun
02/16/2021        101 Alex
02/16/2021        102 Scott
02/15/2021        100 Shaun
02/15/2021        101 Alex
02/15/2021        102 Scott
02/14/2021        100 Shaun
02/14/2021        101 Alex
02/14/2021        102 Scott

9 rows selected.

SQL>