提问者:小点点

插入到…值中(从…中选择…)


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

SQL标准(例如SQL-92)中是否有一种“银弹”语法,允许我插入值而不必担心底层数据库?


共3个答案

匿名用户

尝试:

INSERT INTO table1 ( column1 )
SELECT  col1
FROM    table2  

这是标准的ANSI SQL,可以在任何DBMS上工作

它肯定适用于:

  • Oracle
  • MS SQL Server
  • MySQL
  • Postgres
  • SQLite v3
  • Teradata
  • DB2
  • Sybase
  • 垂直
  • HSQLDB
  • H2
  • AWS红移
  • SAP HANA

匿名用户

ClaudeHoule的回答是:应该可以正常工作,而且您还可以有多列和其他数据:

INSERT INTO table1 ( column1, column2, someInt, someVarChar )
SELECT  table2.column1, table2.column2, 8, 'some string etc.'
FROM    table2
WHERE   table2.ID = 7;

我只在Access,SQL2000/2005/Express,MySQL和PostgreSQL中使用过这种语法,所以这些都应该包括在内。 它还应该与SQLite3一起工作。

匿名用户

为了从另一个表中只获取多值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))