Obie odpowiedzi, które widzę, działają dobrze w szczególności w Informix i są w zasadzie standardowym SQL. Oznacza to, że:
INSERT INTO target_table[(<column-list>)] SELECT ... FROM ...;
działa dobrze z Informix i, oczekiwałbym, z całym DBMS. (Kiedyś 5 lat temu było to coś, czego MySQL nie zawsze obsługiwał; teraz ma przyzwoitą obsługę tego rodzaju standardowej składni SQL i, AFAIK, działałoby OK na tej notacji.) Lista kolumn jest opcjonalny, ale wskazuje kolumny docelowe w sekwencji, więc pierwsza kolumna wyniku SELECT przejdzie do pierwszej wymienionej kolumny itp. W przypadku braku listy kolumn pierwsza kolumna wyniku SELECT przechodzi do pierwsza kolumna tabeli docelowej.
To, co może różnić się między systemami, to notacja używana do identyfikacji tabel w różnych bazach danych - standard nie ma nic do powiedzenia na temat operacji między bazami danych (nie mówiąc już o między DBMS). Dzięki Informix możesz użyć następującej notacji do identyfikacji tabeli:
[dbase[@server]:][owner.]table
Oznacza to, że możesz określić bazę danych, opcjonalnie identyfikując serwer, który obsługuje tę bazę danych, jeśli nie ma jej na bieżącym serwerze, a następnie opcjonalny właściciel, kropka i na koniec rzeczywista nazwa tabeli. Standard SQL używa terminu schemat do tego, co Informix nazywa właścicielem. Dlatego w Informix dowolne z poniższych oznaczeń mogą identyfikować tabelę:
table
"owner".table
dbase:table
dbase:owner.table
dbase@server:table
dbase@server:owner.table
Zasadniczo nie trzeba podawać właściciela; jeśli jednak używasz cudzysłowów, musisz poprawnie wpisać nazwę właściciela - w rozróżnianiu wielkości liter ma znaczenie. To jest:
someone.table
"someone".table
SOMEONE.table
wszystkie identyfikują ten sam stół. W przypadku Informix istnieje niewielka komplikacja z bazami danych MODE ANSI, w których nazwy właścicieli są zazwyczaj konwertowane na wielkie litery (wyjątek stanowi informix). Oznacza to, że w bazie danych MODE ANSI (niezbyt często używane) możesz napisać:
CREATE TABLE someone.table ( ... )
a nazwa właściciela w katalogu systemowym brzmiałaby „SOMEONE”, a nie „ktoś”. Jeśli umieścisz nazwę właściciela w podwójnych cudzysłowach, będzie to działało jak rozdzielany identyfikator. W standardowym języku SQL ograniczników można używać w wielu miejscach. Dzięki Informix możesz używać ich tylko wokół nazw właścicieli - w innych kontekstach Informix traktuje zarówno ciągi jedno-, jak i podwójnie cudzysłowy jako ciągi, a nie oddzielając ciągów jedno- i dwu-cytatowych jako ciągi, a ciągów podwójnych jako rozdzielane identyfikatory. (Oczywiście, dla kompletności, istnieje zmienna środowiskowa DELIMIDENT, którą można ustawić - na dowolną wartość, ale Y jest najbezpieczniejszy - aby wskazać, że podwójne cudzysłowy zawsze otaczają identyfikatory rozdzielane ograniczeniami, a pojedyncze cudzysłowy zawsze otaczają ciągi znaków.)
Zauważ, że MS SQL Server potrafi wykorzystać [identyfikatory rozdzielane] w nawiasach kwadratowych. Wydaje mi się to dziwne i na pewno nie jest częścią standardu SQL.