我试图使用另一个表的输入将数据插入到表中。尽管这对于许多数据库引擎来说是完全可行的,但我似乎总是很难记住当前SQL引擎(MySQL、Oracle、SQL Server、Informix和DB2)的正确语法。

是否有来自SQL标准(例如SQL-92)的银弹语法允许我插入值而不必担心底层数据库?


当前回答

已知表列序列时的简单插入:

    Insert into Table1
    values(1,2,...)

简单插入提及列:

    Insert into Table1(col2,col4)
    values(1,2)

当表(#table2)的选定列数等于插入表(Table1)时进行大容量插入

    Insert into Table1 {Column sequence}
    Select * -- column sequence should be same.
       from #table2

当您只想插入表(表1)的所需列时进行大容量插入:

    Insert into Table1 (Column1,Column2 ....Desired Column from Table1)  
    Select Column1,Column2..desired column from #table2
       from #table2

其他回答

如果要为SELECT部分中的所有列提供值,则可以在不指定INSERT INTO部分中的列的情况下执行此操作。

假设表1有两列。此查询应该可以:

INSERT INTO table1
SELECT  col1, col2
FROM    table2

这将不起作用(未指定col2的值):

INSERT INTO table1
SELECT  col1
FROM    table2

我正在使用MS SQL Server。我不知道其他RDMS是如何工作的。

为了从另一个表中获取多值INSERT中的一个值,我在SQLite3中执行了以下操作:

INSERT INTO column_1 ( val_1, val_from_other_table ) 
VALUES('val_1', (SELECT  val_2 FROM table_2 WHERE val_2 = something))

从任何其他表插入多条记录的最佳方法。

INSERT  INTO dbo.Users
            ( UserID ,
              Full_Name ,
              Login_Name ,
              Password
            )
            SELECT  UserID ,
                    Full_Name ,
                    Login_Name ,
                    Password
            FROM    Users_Table
            (INNER JOIN / LEFT JOIN ...)
            (WHERE CONDITION...)
            (OTHER CLAUSE)
INSERT INTO yourtable
SELECT fielda, fieldb, fieldc
FROM donortable;

这适用于所有DBMS

Postgres支持下一个:创建表company.monitor2,从company.monitor中选择*;