Les deux réponses que je vois fonctionnent correctement dans Informix en particulier, et sont essentiellement du SQL standard. Autrement dit, la notation:
INSERT INTO target_table[(<column-list>)] SELECT ... FROM ...;
fonctionne très bien avec Informix et, je suppose, tous les SGBD. (Il y a 5 ans ou plus, c'est le genre de chose que MySQL ne supportait pas toujours; il a maintenant un support décent pour ce type de syntaxe SQL standard et, AFAIK, cela fonctionnerait bien sur cette notation.) La liste des colonnes est facultatif mais indique les colonnes cibles dans l'ordre, donc la première colonne du résultat du SELECT ira dans la première colonne listée, etc. En l'absence de la liste des colonnes, la première colonne du résultat du SELECT va dans le première colonne de la table cible.
Ce qui peut être différent entre les systèmes, c'est la notation utilisée pour identifier les tables dans différentes bases de données - la norme n'a rien à dire sur les opérations inter-bases de données (et encore moins inter-SGBD). Avec Informix, vous pouvez utiliser la notation suivante pour identifier une table:
[dbase[@server]:][owner.]table
Autrement dit, vous pouvez spécifier une base de données, en identifiant éventuellement le serveur qui héberge cette base de données s'il ne se trouve pas dans le serveur actuel, suivi d'un propriétaire facultatif, d'un point, et enfin du nom réel de la table. Le standard SQL utilise le terme schéma pour ce que Informix appelle le propriétaire. Ainsi, dans Informix, l'une des notations suivantes pourrait identifier une table:
table
"owner".table
dbase:table
dbase:owner.table
dbase@server:table
dbase@server:owner.table
Le propriétaire en général n'a pas besoin d'être cité; cependant, si vous utilisez des guillemets, vous devez obtenir le nom du propriétaire correctement orthographié - il devient sensible à la casse. C'est:
someone.table
"someone".table
SOMEONE.table
tous identifient le même tableau. Avec Informix, il y a une légère complication avec les bases de données MODE ANSI, où les noms des propriétaires sont généralement convertis en majuscules (informix est l'exception). Autrement dit, dans une base de données MODE ANSI (peu utilisée), vous pouvez écrire:
CREATE TABLE someone.table ( ... )
et le nom du propriétaire dans le catalogue système serait "QUELQU'UN", plutôt que "quelqu'un". Si vous mettez le nom du propriétaire entre guillemets, il agit comme un identificateur délimité. Avec SQL standard, les identifiants délimités peuvent être utilisés à de nombreux endroits. Avec Informix, vous pouvez les utiliser uniquement autour des noms de propriétaires - dans d'autres contextes, Informix traite les chaînes entre guillemets simples et doubles comme des chaînes, plutôt que de séparer les chaînes entre guillemets simples en tant que chaînes et les chaînes entre guillemets doubles en tant qu'identificateurs délimités. (Bien sûr, juste pour être complet, il existe une variable d'environnement, DELIMIDENT, qui peut être définie - sur n'importe quelle valeur, mais Y est la plus sûre - pour indiquer que les guillemets doubles entourent toujours les identificateurs délimités et les guillemets simples entourent toujours les chaînes.)
Notez que MS SQL Server parvient à utiliser des [identificateurs délimités] entre crochets. Cela me semble bizarre et ne fait certainement pas partie du standard SQL.