Entrambe le risposte che vedo funzionano bene in Informix in particolare e sono sostanzialmente SQL standard. Cioè, la notazione:
INSERT INTO target_table[(<column-list>)] SELECT ... FROM ...;
funziona bene con Informix e, mi aspetterei, tutto il DBMS. (Una volta 5 o più anni fa, questo è il genere di cose che MySQL non ha sempre supportato; ora ha un supporto decente per questo tipo di sintassi SQL standard e, AFAIK, funzionerebbe bene su questa notazione.) L'elenco delle colonne è facoltativo ma indica le colonne di destinazione in sequenza, quindi la prima colonna del risultato di SELECT andrà nella prima colonna elencata, ecc. In assenza dell'elenco di colonne, la prima colonna del risultato di SELECT va nella prima colonna della tabella di destinazione.
Ciò che può essere diverso tra i sistemi è la notazione utilizzata per identificare le tabelle in diversi database: lo standard non ha nulla da dire sulle operazioni tra database (per non parlare di inter-DBMS). Con Informix, è possibile utilizzare la seguente notazione per identificare una tabella:
[dbase[@server]:][owner.]table
Cioè, è possibile specificare un database, identificando facoltativamente il server che ospita quel database se non si trova nel server corrente, seguito da un proprietario facoltativo, punto e infine il nome effettivo della tabella. Lo standard SQL utilizza il termine schema per ciò che Informix chiama il proprietario. Pertanto, in Informix, una delle seguenti notazioni potrebbe identificare una tabella:
table
"owner".table
dbase:table
dbase:owner.table
dbase@server:table
dbase@server:owner.table
Il proprietario in generale non ha bisogno di essere quotato; tuttavia, se si utilizzano le virgolette, è necessario ottenere correttamente il nome del proprietario - diventa sensibile al maiuscolo / minuscolo. Questo è:
someone.table
"someone".table
SOMEONE.table
tutti identificano la stessa tabella. Con Informix, c'è una leggera complicazione con i database MODE ANSI, in cui i nomi dei proprietari vengono generalmente convertiti in maiuscolo (informix è l'eccezione). Cioè, in un database ANSI MODE (non comunemente usato), è possibile scrivere:
CREATE TABLE someone.table ( ... )
e il nome del proprietario nel catalogo di sistema sarebbe "QUALCUNO", piuttosto che "qualcuno". Se racchiudi il nome del proprietario tra virgolette doppie, si comporta come un identificatore delimitato. Con SQL standard, gli identificatori delimitati possono essere utilizzati in molti luoghi. Con Informix, puoi usarli solo attorno ai nomi dei proprietari: in altri contesti, Informix tratta sia le stringhe a virgoletta singola che quelle tra virgolette doppie come stringhe, anziché separare stringhe a virgoletta singola come stringhe e stringhe a virgolette doppie come identificatori delimitati. (Naturalmente, solo per completezza, esiste una variabile d'ambiente, DELIMIDENT, che può essere impostata - su qualsiasi valore, ma Y è la più sicura - per indicare che le virgolette doppie circondano sempre identificatori delimitati e le virgolette singole circondano sempre stringhe.)
Si noti che MS SQL Server riesce a utilizzare [identificatori delimitati] racchiusi tra parentesi quadre. Mi sembra strano, e certamente non fa parte dello standard SQL.