Страница 1 из 1
insert select where
Добавлено: 07 май 2009, 10:20
Larisa
Подскажите как написать добавление определенных записей?
insert tab25
select tab26
where (( dfor1 <<= tab26.da1
and dfor2 >>= tab26.da2 ))
;
Так компилятор ругается.
Добавлено: 07 май 2009, 11:12
Vik
Что-нить типа:
Код: Выделить всё
insert
tab25
select
*
from
tab26
where
(( dfor1 <<= tab26.da1
and dfor2 >>= tab26.da2 ))
;
Только тогда надо следить, чтоб типы полей совпадали в обеих таблицах, либо явно списки полей указывать
Добавлено: 07 май 2009, 11:14
evchic
Вот так
Код: Выделить всё
insert tab25(поле1,поле2) select tab26.поле1,tab26.поле2 from tab26 where (( dfor1 <<= tab26.da1 and dfor2 >>= tab26.da2 ));
т.е. нужно перечислять поля - в которые вставляем insert tab25(поле1,поле2)
select tab26.поле1,tab26.поле2 - что вставляем
Добавлено: 07 май 2009, 11:16
evchic
Оператор insert ... select позволяет копировать содержимое выборки в произвольную таблицу, в том числе и в таблицу в памяти. Он ускоряет работу прикладного кода и повышает совместимость с языком SQL.
<оператор-копирования-выборки> = insert
[ <параметры-визуализации> ]
[ into ] <имя-таблицы> [ ( <список-полей> ) ]
select <оператор-выборки>
[ ignore_errors ( <список-кодов> ) ] ;
<параметры-визуализации> - параметры визуализации итераций по таблице. По синтаксису и реализации совпадают с элементом <параметр-визуализации> операторов модификации (раздел "Операторы Insert, Update и Delete. ").
<имя-таблицы> - узел логической таблицы, в который будет вставлена выборка.
<список-полей> - перечислены поля таблицы, в которые производится вставка значений из соответствующих позиций в операторе select.
При перечислении полей в элементе <список-полей> необходимо позиционное соответствие между полями в нем и значениями полей в элементе <оператор-выборки>, при этом примитивные преобразования типов могут быть выполнены компилятором автоматически. Если элемент <список-полей> опущен, то значения из оператора выборки должны соответствовать всем полям таблицы назначения в соответствии с описанием структуры таблицы.
<оператор-выборки> - оператор выборки языка VIP. См. "Оператор описания выборки (select). ".
В операторе insert ... select <оператор-выборки> представляет собой отдельную логическую таблицу, которая не связана ни с логическими таблицами интерфейса, ни с ограничениями, накладываемыми на них в тот или иной момент времени. А это значит, что все ограничения на <оператор-выборки> необходимо задавать внутри него самого.
Если в операторе выборки отсутствуют вычисляемые выражения (в качестве элементов выборки используются константы и поля таблиц базы данных), и если драйвер базы данных реализует соответствующую функцию, то весь оператор может быть выполнен на сервере базы данных без пересылки данных между сервером и клиентом.
<список-кодов> - список кодов ошибок (числа или идентификаторы ts-констант, разделенные запятыми), которые будут игнорироваться в процессе исполнения оператора. См. "Коды ошибок обращения к БД".
Добавлено: 08 май 2009, 13:42
Vik
Как видно из описания, поля перечислять необязательно. Другое дело, что тогда правильность будет зависеть от структуры обеих таблиц)