协慌网

登录 贡献 社区

插入... 值(SELECT ... FROM ...)

我试图使用另一个表的输入INSERT INTO表。虽然这对于许多数据库引擎来说完全可行,但我似乎总是很难记住当时SQL引擎的正确语法( MySQLOracleSQL ServerInformixDB2 )。

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

答案

尝试:

INSERT INTO table1 ( column1 )
SELECT  col1
FROM    table2

这是标准的 ANSI SQL,应该适用于任何 DBMS

它肯定适用于:

  • 神谕
  • MS SQL Server
  • MySQL 的
  • Postgres 的
  • SQLite v3
  • Teradata 数据
  • DB2
  • SYBASE
  • Vertica 的
  • HSQLDB
  • H2
  • AWS RedShift
  • SAP HANA

@ Shadow_x99 :这应该可以正常工作,你也可以有多列和其他数据:

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

编辑:我应该提一下,我只使用 Access,SQL 2000/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))