Оба ответа, которые я вижу, отлично работают в Informix, и в основном это стандартный SQL. То есть обозначение:
INSERT INTO target_table[(<column-list>)] SELECT ... FROM ...;
отлично работает с Informix и, как я ожидал, со всеми СУБД. (Когда-то 5 или более лет назад, MySQL не всегда поддерживал такую ситуацию; теперь он имеет достойную поддержку для такого рода стандартного синтаксиса SQL и, AFAIK, будет работать нормально в этой записи.) Список столбцов является необязательным, но указывает целевые столбцы в последовательности, поэтому первый столбец результата SELECT перейдет в первый перечисленный столбец и т. д. При отсутствии списка столбцов первый столбец результата SELECT перейдет в первый столбец целевой таблицы.
Что может отличаться в разных системах, так это нотация, используемая для идентификации таблиц в разных базах данных - стандарт не имеет ничего общего с операциями между базами данных (не говоря уже о базах данных). С Informix вы можете использовать следующие обозначения для идентификации таблицы:
[dbase[@server]:][owner.]table
Таким образом, вы можете указать базу данных, опционально идентифицируя сервер, на котором размещена эта база данных, если его нет на текущем сервере, за которым следует необязательный владелец, точка и, наконец, фактическое имя таблицы. Стандарт SQL использует термин схема для того, что Informix называет владельцем. Таким образом, в Informix любая из следующих нотаций может идентифицировать таблицу:
table
"owner".table
dbase:table
dbase:owner.table
dbase@server:table
dbase@server:owner.table
Владелец вообще не должен быть указан; однако, если вы используете кавычки, вам нужно правильно написать имя владельца - оно становится чувствительным к регистру. Это:
someone.table
"someone".table
SOMEONE.table
все идентифицируют одну и ту же таблицу. С Informix есть небольшое осложнение с базами данных MODE ANSI, где имена владельцев обычно преобразуются в верхний регистр (informix является исключением). То есть в базе данных MODE ANSI (обычно не используется) вы можете написать:
CREATE TABLE someone.table ( ... )
и имя владельца в системном каталоге будет «НЕКОТОРЫЙ», а не «кто-то». Если вы заключаете имя владельца в двойные кавычки, оно действует как идентификатор с разделителями. В стандартном SQL идентификаторы с разделителями могут использоваться во многих местах. В Informix вы можете использовать их только вокруг имен владельцев - в других контекстах Informix обрабатывает как строки в одинарных кавычках, так и строки в двойных кавычках как строки, а не разделяет строки в одинарных кавычках как строки, а строки в двойных кавычках - как идентификаторы с разделителями. (Конечно, просто для полноты есть переменная окружения DELIMIDENT, которую можно установить на любое значение, но Y безопаснее всего - указать, что двойные кавычки всегда окружают идентификаторы с разделителями, а одинарные кавычки всегда окружают строки.)
Обратите внимание, что MS SQL Server удается использовать [идентификаторы с разделителями], заключенные в квадратные скобки. Это выглядит странно для меня, и, конечно, не является частью стандарта SQL.