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

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


当前回答

这对我有用:

insert into table1 select * from table2

这句话和甲骨文的有点不同。

其他回答

select *
into tmp
from orders

看起来不错,但只有当tmp不存在时才有效(创建并填充)。(SQL服务器)

要插入现有tmp表:

set identity_insert tmp on

insert tmp 
([OrderID]
      ,[CustomerID]
      ,[EmployeeID]
      ,[OrderDate]
      ,[RequiredDate]
      ,[ShippedDate]
      ,[ShipVia]
      ,[Freight]
      ,[ShipName]
      ,[ShipAddress]
      ,[ShipCity]
      ,[ShipRegion]
      ,[ShipPostalCode]
      ,[ShipCountry] )
      select * from orders

set identity_insert tmp off

使用select子查询插入的两种方法。

SELECT子查询返回一行结果。SELECT子查询返回多行结果。

1.With SELECT子查询返回一行结果的方法。

INSERT INTO <table_name> (<field1>, <field2>, <field3>) 
VALUES ('DUMMY1', (SELECT <field> FROM <table_name> ),'DUMMY2');

在这种情况下,它假设SELECT子查询仅返回一行基于WHERE条件或SQL聚合函数(如SUM、MAX、AVG等)的结果,否则将抛出错误

2.With SELECT子查询返回多行结果的方法。

INSERT INTO <table_name> (<field1>, <field2>, <field3>) 
SELECT 'DUMMY1', <field>, 'DUMMY2' FROM <table_name>;

第二种方法适用于这两种情况。

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

    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 * INTO TableYedek From Table

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

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