Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.09.2017, 14:00   #1
ssm116
 
Регистрация: 27.07.2017
Сообщений: 5
Радость множество select в одном insert

Доброго дня. Возник вопрос по поводу добавления данных с одной таблицы в другую. Есть 3 таблицы:
tab1:id,name,kod_id;
tab2:kod_id,length,line;
tab3:id,name,length,curdate;

Суть в том что нужно добавить данные из таблицы tab2 в tab3 у которых line = (к примеру "5").пример кода:
Код:
'INSERT into tab3(id,name,length,curdate) values (tab3_id.nextval,(select kode_id from tab2 where line=5),(select length from tab2 where line=5),sysdate)
Это только начало что бы легче было понять мою задачку на самом деле данные с поля kod_i из tab2 сравнивается со значением kod_id из tab1 и в tab3 идет уже не kod_id а то значение которое соответствует в таблице tab1
Код:
(select tab1.id from tab1 where tab1.kode_id = (select kode_id from tab2 where line = 5))
тоесть в итоге в tab3.name идут значения с tab1.id
Получается из tab2 берутся значения поля kode_id у который line = 5, эти значения идут через tab1 и tab1.id у которых tab1.kode_id равны tab2.kode_id идут на замену tab2.kode_id в tab3.name. но с этим тоже все понятно. Сделал вот так
Код:
(select tab1.id from tab1 where tab1.kode_id=(select kode_id from tab2 where line = 5))
. в итоге вышел вот такой запрос::::
Код:
INSERT into tab3(id,name,length,curdate) values (tab3_id.nextval (select tab1.id from tab1 where tab1.kode_id=(select kode_id from tab2 where line = 5)),(select length from tab2 where line=5),sysdate).
и этот запрос сработает только если в tab2 всего одна строка у которого line = 5. а если их больше то выходит естественно ошибка. потому что при первом же запросе " (select tab1.id from tab1 where tab1.kode_id=(select kode_id from tab2 where line = 5))" ответ запроса tab1.kode_id=[массив полученный при запросе]. вопрос как это сделать...Надеюсь более менее разъяснил что и как. тут каша но вникнуть надеюсь получится. нужно сделать как бы цикл запроса.

Последний раз редактировалось ssm116; 26.09.2017 в 14:10.
ssm116 вне форума Ответить с цитированием
Старый 26.09.2017, 14:57   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

какая у Вас СУБД? Oracle?

и не совсем понятно, почему в поле tab3.name вставляется id из таблицы tab1.

но в целом, попробуйте примерно так
Код:
INSERT into tab3 (id,name,length,curdate) 
select tab3_id.nextval, tab1.id, tab2.length, sysdate
from tab2 
inner join tab1 on tab1.kode_id=tab2.kode_id 
where tab2.line = 5
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.09.2017, 15:01   #3
ssm116
 
Регистрация: 27.07.2017
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
какая у Вас СУБД? Oracle?

и не совсем понятно, почему в поле tab3.name вставляется id из таблицы tab1.
да, Oracle. В таблице tab1 содержится расшифровка значений из tab2.kode_id
ssm116 вне форума Ответить с цитированием
Старый 26.09.2017, 15:36   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от ssm116 Посмотреть сообщение
В таблице tab1 содержится расшифровка значений из tab2.kode_id
ну, это понятно. не понятно, почему поле в таблице tab3 называется name, если в него записывается id из таблицы tab1

впрочем, это не суть.

Запрос то отработал?
Вопрос закрыт?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.09.2017, 16:02   #5
ssm116
 
Регистрация: 27.07.2017
Сообщений: 5
По умолчанию

Да все работает. Огромное спасибо за помощь! Все супер.
ssm116 вне форума Ответить с цитированием
Старый 26.09.2017, 16:21   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

ага. не за что.


p.s. для изучения SQL очень рекомендую ознакомится с книжкой Мартина Грабера "Понимание SQL"
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Insert + Select = You can't specify target table -Jack- SQL, базы данных 10 02.11.2016 12:57
Использование операторов SELECT, DELETE и UPDATE в одном запросе в PDO Dante5 SQL, базы данных 4 19.09.2015 11:41
Написание процедур select, delete, update, insert (с выходным параметром) NatRez SQL, базы данных 4 21.10.2012 19:54
INSERT Value( select) Marina8 Помощь студентам 5 24.04.2012 13:03
Запрос вида Insert..Select MySQL Svap SQL, базы данных 3 11.01.2011 19:11