Beide Antworten, die ich sehe, funktionieren speziell in Informix und sind im Grunde Standard-SQL. Das heißt, die Notation:
INSERT INTO target_table[(<column-list>)] SELECT ... FROM ...;
funktioniert gut mit Informix und, wie ich erwarten würde, dem gesamten DBMS. (Vor fünf oder mehr Jahren hat MySQL diese Art von Dingen nicht immer unterstützt. Diese Standard-SQL-Syntax wird jetzt angemessen unterstützt, und AFAIK würde bei dieser Notation einwandfrei funktionieren.) Die Spaltenliste ist optional, gibt jedoch die Zielspalten nacheinander an, sodass die erste Spalte des Ergebnisses von SELECT in die erste aufgelistete Spalte usw. verschoben wird. Wenn keine Spaltenliste vorhanden ist, wird die erste Spalte des Ergebnisses von SELECT in die Spalte aufgenommen erste Spalte der Zieltabelle.
Was zwischen den Systemen unterschiedlich sein kann, ist die Notation, mit der Tabellen in verschiedenen Datenbanken identifiziert werden. Der Standard hat nichts über datenbankübergreifende Operationen (geschweige denn zwischen DBMS-Operationen) zu sagen. Mit Informix können Sie die folgende Notation verwenden, um eine Tabelle zu identifizieren:
[dbase[@server]:][owner.]table
Das heißt, Sie können eine Datenbank angeben und optional den Server identifizieren, auf dem sich diese Datenbank befindet, wenn sie sich nicht auf dem aktuellen Server befindet, gefolgt von einem optionalen Eigentümer, einem Punkt und schließlich dem tatsächlichen Tabellennamen. Der SQL-Standard verwendet den Begriff Schema für das, was Informix den Eigentümer nennt. In Informix kann daher jede der folgenden Notationen eine Tabelle identifizieren:
table
"owner".table
dbase:table
dbase:owner.table
dbase@server:table
dbase@server:owner.table
Der Eigentümer muss im Allgemeinen nicht angegeben werden; Wenn Sie jedoch Anführungszeichen verwenden, muss der Name des Eigentümers korrekt geschrieben werden. Dabei wird zwischen Groß- und Kleinschreibung unterschieden. Das ist:
someone.table
"someone".table
SOMEONE.table
Alle identifizieren dieselbe Tabelle. Bei Informix gibt es eine leichte Komplikation bei MODE ANSI-Datenbanken, bei denen Eigentümernamen im Allgemeinen in Großbuchstaben konvertiert werden (informix ist die Ausnahme). Das heißt, in einer MODE ANSI-Datenbank (nicht häufig verwendet) können Sie schreiben:
CREATE TABLE someone.table ( ... )
und der Name des Besitzers im Systemkatalog wäre "JEMAND" und nicht "jemand". Wenn Sie den Eigentümernamen in doppelte Anführungszeichen setzen, verhält er sich wie eine durch Trennzeichen getrennte Kennung. Mit Standard-SQL können begrenzte Bezeichner an vielen Stellen verwendet werden. Mit Informix können Sie sie nur für Eigentümernamen verwenden. In anderen Kontexten behandelt Informix sowohl Zeichenfolgen in einfachen als auch in doppelten Anführungszeichen als Zeichenfolgen, anstatt Zeichenfolgen in einfachen Anführungszeichen als Zeichenfolgen und Zeichenfolgen in doppelten Anführungszeichen als durch Trennzeichen getrennte Bezeichner zu trennen. (Der Vollständigkeit halber gibt es natürlich eine Umgebungsvariable, DELIMIDENT, die auf einen beliebigen Wert gesetzt werden kann, aber Y ist am sichersten, um anzuzeigen, dass doppelte Anführungszeichen immer begrenzte Bezeichner und einfache Anführungszeichen immer Zeichenfolgen umgeben.)
Beachten Sie, dass MS SQL Server die Verwendung von [durch Trennzeichen getrennten Bezeichnern] in eckigen Klammern ermöglicht. Es sieht für mich komisch aus und ist sicherlich nicht Teil des SQL-Standards.