Kedua jawaban yang saya lihat berfungsi dengan baik di Informix secara khusus, dan pada dasarnya adalah SQL standar. Yaitu, notasi:
INSERT INTO target_table[(<column-list>)] SELECT ... FROM ...;
berfungsi baik dengan Informix dan, saya harapkan, semua DBMS. (Sekali pada 5 tahun atau lebih yang lalu, ini adalah hal yang tidak selalu didukung oleh MySQL; sekarang memiliki dukungan yang layak untuk sintaks SQL standar semacam ini dan, AFAIK, ini akan berfungsi dengan baik pada notasi ini.) Daftar kolom bersifat opsional tetapi menunjukkan kolom target secara berurutan, sehingga kolom pertama dari hasil SELECT akan masuk ke dalam kolom yang tercantum pertama, dll. Dengan tidak adanya daftar kolom, kolom pertama dari hasil SELECT masuk ke dalam kolom pertama dari tabel target.
Apa yang bisa berbeda antara sistem adalah notasi yang digunakan untuk mengidentifikasi tabel dalam basis data yang berbeda - standar tidak ada hubungannya dengan operasi antar-database (apalagi antar-DBMS). Dengan Informix, Anda dapat menggunakan notasi berikut untuk mengidentifikasi tabel:
[dbase[@server]:][owner.]table
Yaitu, Anda dapat menentukan database, secara opsional mengidentifikasi server yang menghosting database itu jika tidak ada di server saat ini, diikuti oleh pemilik opsional, titik, dan akhirnya nama tabel sebenarnya. Standar SQL menggunakan skema jangka untuk apa yang Informix sebut sebagai pemilik. Dengan demikian, di Informix, salah satu notasi berikut dapat mengidentifikasi tabel:
table
"owner".table
dbase:table
dbase:owner.table
dbase@server:table
dbase@server:owner.table
Pemilik secara umum tidak perlu dikutip; namun, jika Anda menggunakan tanda kutip, Anda perlu mengeja nama pemilik dengan benar - itu menjadi case-sensitive. Itu adalah:
someone.table
"someone".table
SOMEONE.table
semua mengidentifikasi tabel yang sama. Dengan Informix, ada sedikit kesulitan dengan database MODE ANSI, di mana nama pemilik umumnya dikonversi ke huruf besar (informix adalah pengecualian). Artinya, dalam basis data MODE ANSI (tidak umum digunakan), Anda dapat menulis:
CREATE TABLE someone.table ( ... )
dan nama pemilik dalam katalog sistem adalah "SESEORANG", bukan 'seseorang'. Jika Anda menyertakan nama pemilik dalam tanda kutip ganda, itu bertindak seperti pengidentifikasi terbatas. Dengan SQL standar, pengidentifikasi terbatas dapat digunakan di banyak tempat. Dengan Informix, Anda dapat menggunakannya hanya di sekitar nama pemilik - dalam konteks lain, Informix memperlakukan string dengan tanda kutip tunggal dan kutip ganda sebagai string, alih-alih memisahkan string tanda kutip tunggal sebagai string dan string tanda kutip ganda sebagai pengidentifikasi terbatas. (Tentu saja, hanya untuk kelengkapan, ada variabel lingkungan, DELIMIDENT, yang dapat diatur - untuk nilai apa pun, tetapi Y adalah yang paling aman - untuk menunjukkan bahwa tanda kutip ganda selalu mengelilingi pengidentifikasi yang dibatasi dan tanda kutip tunggal selalu mengelilingi string.)
Perhatikan bahwa MS SQL Server berhasil menggunakan [pengidentifikasi terbatas] terlampir dalam tanda kurung siku. Itu terlihat aneh bagi saya, dan tentu saja bukan bagian dari standar SQL.