insert select where

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Larisa
Посетитель
Сообщения: 38
Зарегистрирован: 12 мар 2009, 15:17

insert select where

Сообщение Larisa »

Подскажите как написать добавление определенных записей?
insert tab25
select tab26
where (( dfor1 <<= tab26.da1
and dfor2 >>= tab26.da2 ))
;
Так компилятор ругается.
Vik
Местный житель
Сообщения: 370
Зарегистрирован: 28 сен 2006, 15:43
Откуда: Санкт-Петербург
Контактная информация:

Сообщение Vik »

Что-нить типа:

Код: Выделить всё

insert 
  tab25
select 
  *
from
 tab26
where 
((    dfor1 <<= tab26.da1
and dfor2 >>= tab26.da2 ))
; 
Только тогда надо следить, чтоб типы полей совпадали в обеих таблицах, либо явно списки полей указывать
evchic
Местный житель
Сообщения: 216
Зарегистрирован: 25 апр 2006, 12:05
Откуда: г.Ростов-на-Дону
Контактная информация:

Сообщение 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 - что вставляем
evchic
Местный житель
Сообщения: 216
Зарегистрирован: 25 апр 2006, 12:05
Откуда: г.Ростов-на-Дону
Контактная информация:

Сообщение evchic »

Оператор insert ... select позволяет копировать содержимое выборки в произвольную таблицу, в том числе и в таблицу в памяти. Он ускоряет работу прикладного кода и повышает совместимость с языком SQL.

<оператор-копирования-выборки> = insert
[ <параметры-визуализации> ]
[ into ] <имя-таблицы> [ ( <список-полей> ) ]
select <оператор-выборки>
[ ignore_errors ( <список-кодов> ) ] ;
<параметры-визуализации> - параметры визуализации итераций по таблице. По синтаксису и реализации совпадают с элементом <параметр-визуализации> операторов модификации (раздел "Операторы Insert, Update и Delete. ").

<имя-таблицы> - узел логической таблицы, в который будет вставлена выборка.

<список-полей> - перечислены поля таблицы, в которые производится вставка значений из соответствующих позиций в операторе select.

При перечислении полей в элементе <список-полей> необходимо позиционное соответствие между полями в нем и значениями полей в элементе <оператор-выборки>, при этом примитивные преобразования типов могут быть выполнены компилятором автоматически. Если элемент <список-полей> опущен, то значения из оператора выборки должны соответствовать всем полям таблицы назначения в соответствии с описанием структуры таблицы.

<оператор-выборки> - оператор выборки языка VIP. См. "Оператор описания выборки (select). ".

В операторе insert ... select <оператор-выборки> представляет собой отдельную логическую таблицу, которая не связана ни с логическими таблицами интерфейса, ни с ограничениями, накладываемыми на них в тот или иной момент времени. А это значит, что все ограничения на <оператор-выборки> необходимо задавать внутри него самого.

Если в операторе выборки отсутствуют вычисляемые выражения (в качестве элементов выборки используются константы и поля таблиц базы данных), и если драйвер базы данных реализует соответствующую функцию, то весь оператор может быть выполнен на сервере базы данных без пересылки данных между сервером и клиентом.

<список-кодов> - список кодов ошибок (числа или идентификаторы ts-констант, разделенные запятыми), которые будут игнорироваться в процессе исполнения оператора. См. "Коды ошибок обращения к БД".
Vik
Местный житель
Сообщения: 370
Зарегистрирован: 28 сен 2006, 15:43
Откуда: Санкт-Петербург
Контактная информация:

Сообщение Vik »

Как видно из описания, поля перечислять необязательно. Другое дело, что тогда правильность будет зависеть от структуры обеих таблиц)
Ответить