我试图使用另一个表的输入将数据插入到表中。尽管这对于许多数据库引擎来说是完全可行的,但我似乎总是很难记住当前SQL引擎(MySQL、Oracle、SQL Server、Informix和DB2)的正确语法。
是否有来自SQL标准(例如SQL-92)的银弹语法允许我插入值而不必担心底层数据库?
我试图使用另一个表的输入将数据插入到表中。尽管这对于许多数据库引擎来说是完全可行的,但我似乎总是很难记住当前SQL引擎(MySQL、Oracle、SQL Server、Informix和DB2)的正确语法。
是否有来自SQL标准(例如SQL-92)的银弹语法允许我插入值而不必担心底层数据库?
当前回答
在informix中,正如克劳德所说:
INSERT INTO table (column1, column2)
VALUES (value1, value2);
其他回答
大多数数据库遵循基本语法,
INSERT INTO TABLE_NAME
SELECT COL1, COL2 ...
FROM TABLE_YOU_NEED_TO_TAKE_FROM
;
我使用的每个数据库都遵循这种语法,即DB2、SQL Server、MY SQL、PostgresQL
Try:
INSERT INTO table1 ( column1 )
SELECT col1
FROM table2
这是标准的ANSI SQL,适用于任何DBMS
它绝对适用于:
神谕MS SQL ServerMySQL数据库Postgres公司SQLite v3Teradata公司分布式数据库Sybase公司Vertica公司hsql数据库氢气AWS红移萨普哈纳谷歌扳手
INSERT INTO yourtable
SELECT fielda, fieldb, fieldc
FROM donortable;
这适用于所有DBMS
Claude Houle的回答是:应该可以正常工作,也可以有多个列和其他数据:
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 INTO CUSTOMER_INFO
(SELECT CUSTOMER_NAME,
MOBILE_NO,
ADDRESS
FROM OWNER_INFO cm)
其中表格如下:
CUSTOMER_INFO || OWNER_INFO
----------------------------------------||-------------------------------------
CUSTOMER_NAME | MOBILE_NO | ADDRESS || CUSTOMER_NAME | MOBILE_NO | ADDRESS
--------------|-----------|--------- || --------------|-----------|---------
A | +1 | DC || B | +55 | RR
结果:
CUSTOMER_INFO || OWNER_INFO
----------------------------------------||-------------------------------------
CUSTOMER_NAME | MOBILE_NO | ADDRESS || CUSTOMER_NAME | MOBILE_NO | ADDRESS
--------------|-----------|--------- || --------------|-----------|---------
A | +1 | DC || B | +55 | RR
B | +55 | RR ||