#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>