我试图使用另一个表的输入将数据插入到表中。尽管这对于许多数据库引擎来说是完全可行的,但我似乎总是很难记住当前SQL引擎(MySQL、Oracle、SQL Server、Informix和DB2)的正确语法。
是否有来自SQL标准(例如SQL-92)的银弹语法允许我插入值而不必担心底层数据库?
我试图使用另一个表的输入将数据插入到表中。尽管这对于许多数据库引擎来说是完全可行的,但我似乎总是很难记住当前SQL引擎(MySQL、Oracle、SQL Server、Informix和DB2)的正确语法。
是否有来自SQL标准(例如SQL-92)的银弹语法允许我插入值而不必担心底层数据库?
当前回答
Try:
INSERT INTO table1 ( column1 )
SELECT col1
FROM table2
这是标准的ANSI SQL,适用于任何DBMS
它绝对适用于:
神谕MS SQL ServerMySQL数据库Postgres公司SQLite v3Teradata公司分布式数据库Sybase公司Vertica公司hsql数据库氢气AWS红移萨普哈纳谷歌扳手
其他回答
Try:
INSERT INTO table1 ( column1 )
SELECT col1
FROM table2
这是标准的ANSI SQL,适用于任何DBMS
它绝对适用于:
神谕MS SQL ServerMySQL数据库Postgres公司SQLite v3Teradata公司分布式数据库Sybase公司Vertica公司hsql数据库氢气AWS红移萨普哈纳谷歌扳手
为了从另一个表中获取多值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))
不用INSERT查询的VALUES部分,只需使用SELECT查询,如下所示。
INSERT INTO table1 ( column1 , 2, 3... )
SELECT col1, 2, 3... FROM table2
如果您想在表中插入一些数据而不想写入列名。
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 ||
使用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>;
第二种方法适用于这两种情况。