我试图使用另一个表的输入将数据插入到表中。尽管这对于许多数据库引擎来说是完全可行的,但我似乎总是很难记住当前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

其他回答

大多数数据库遵循基本语法,

INSERT INTO TABLE_NAME
SELECT COL1, COL2 ...
FROM TABLE_YOU_NEED_TO_TAKE_FROM
;

我使用的每个数据库都遵循这种语法,即DB2、SQL Server、MY SQL、PostgresQL

实际上,我更喜欢SQL Server 2008中的以下内容:

SELECT Table1.Column1, Table1.Column2, Table2.Column1, Table2.Column2, 'Some String' AS SomeString, 8 AS SomeInt
INTO Table3
FROM Table1 INNER JOIN Table2 ON Table1.Column1 = Table2.Column3

它省去了添加Insert()集的步骤,只需选择表中的值。

如果您首先创建表,可以这样使用;

  select * INTO TableYedek From Table

这将插入值,但与创建新的复制表不同。

在informix中,正如克劳德所说:

INSERT INTO table (column1, column2) 
VALUES (value1, value2);    

以下是如何从多个表中插入。这个特定的示例是在多对多场景中有一个映射表:

insert into StudentCourseMap (StudentId, CourseId) 
SELECT  Student.Id, Course.Id FROM Student, Course 
WHERE Student.Name = 'Paddy Murphy' AND Course.Name = 'Basket weaving for beginners'

(我意识到在学生姓名上进行匹配可能会返回不止一个值,但你明白这一点。当Id是身份列且未知时,需要在Id以外的其他值上进行匹配。)