我试图使用另一个表的输入将数据插入到表中。尽管这对于许多数据库引擎来说是完全可行的,但我似乎总是很难记住当前SQL引擎(MySQL、Oracle、SQL Server、Informix和DB2)的正确语法。
是否有来自SQL标准(例如SQL-92)的银弹语法允许我插入值而不必担心底层数据库?
我试图使用另一个表的输入将数据插入到表中。尽管这对于许多数据库引擎来说是完全可行的,但我似乎总是很难记住当前SQL引擎(MySQL、Oracle、SQL Server、Informix和DB2)的正确语法。
是否有来自SQL标准(例如SQL-92)的银弹语法允许我插入值而不必担心底层数据库?
当前回答
实际上,我更喜欢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()集的步骤,只需选择表中的值。
其他回答
INSERT INTO yourtable
SELECT fielda, fieldb, fieldc
FROM donortable;
这适用于所有DBMS
如果要为SELECT部分中的所有列提供值,则可以在不指定INSERT INTO部分中的列的情况下执行此操作。
假设表1有两列。此查询应该可以:
INSERT INTO table1
SELECT col1, col2
FROM table2
这将不起作用(未指定col2的值):
INSERT INTO table1
SELECT col1
FROM table2
我正在使用MS SQL Server。我不知道其他RDMS是如何工作的。
实际上,我更喜欢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()集的步骤,只需选择表中的值。
Postgres支持下一个:创建表company.monitor2,从company.monitor中选择*;
INSERT INTO FIRST_TABLE_NAME (COLUMN_NAME)
SELECT COLUMN_NAME
FROM ANOTHER_TABLE_NAME
WHERE CONDITION;