Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / MySQL Новый топик    Ответить
 insert select  [new]
ssm116
Member

Откуда:
Сообщений: 4
Доброго дня. Возник вопрос по поводу добавления данных с одной таблицы в другую. Есть 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=[массив полученный при запросе]. вопрос как это сделать...Надеюсь более менее разъяснил что и как. тут каша но вникнуть надеюсь получится. нужно сделать как бы цикл запроса.
26 сен 17, 14:13    [20823873]     Ответить | Цитировать Сообщить модератору
 Re: insert select  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 16227
Начните с чтения документации по INSERT ... SELECT Syntax.
+
И вообще забудьте про INSERT .. VALUES - это всего лишь убогая обёртка.
INSERT (fields) 
VALUES (values1), (values2), ...
эквивалентно
INSERT (fields)
SELECT (values1)
UNION ALL
SELECT (values2)
UNION ALL
...
но избавлено от дебильных подзапросов.
26 сен 17, 14:55    [20824099]     Ответить | Цитировать Сообщить модератору
 Re: insert select  [new]
miksoft
Member

Откуда:
Сообщений: 36389
ssm116,

СУБД какая?
tab3_id.nextval - это больше на Оракл похоже, чем на MySQL.
27 сен 17, 20:28    [20827698]     Ответить | Цитировать Сообщить модератору
Все форумы / MySQL Ответить