我试图使用另一个表的输入将数据插入到表中。尽管这对于许多数据库引擎来说是完全可行的,但我似乎总是很难记住当前SQL引擎(MySQL、Oracle、SQL Server、Informix和DB2)的正确语法。
是否有来自SQL标准(例如SQL-92)的银弹语法允许我插入值而不必担心底层数据库?
我试图使用另一个表的输入将数据插入到表中。尽管这对于许多数据库引擎来说是完全可行的,但我似乎总是很难记住当前SQL引擎(MySQL、Oracle、SQL Server、Informix和DB2)的正确语法。
是否有来自SQL标准(例如SQL-92)的银弹语法允许我插入值而不必担心底层数据库?
当前回答
要在第一个答案中添加一些内容,当我们只需要另一个表中的几个记录时(在本例中只有一个):
INSERT INTO TABLE1
(COLUMN1, COLUMN2, COLUMN3, COLUMN4)
VALUES (value1, value2,
(SELECT COLUMN_TABLE2
FROM TABLE2
WHERE COLUMN_TABLE2 like "blabla"),
value4);
其他回答
对于Microsoft SQL Server,我建议您学习解释MSDN上提供的语法。使用谷歌,查找语法比以往任何时候都容易。
对于这种特殊情况,请尝试
谷歌:插入网址:microsoft.com
第一个结果是http://msdn.microsoft.com/en-us/library/ms174335.aspx
如果您发现难以解释页面顶部给出的语法,请向下滚动到示例(“使用SELECT和EXECUTE选项从其他表插入数据”)。
[ WITH <common_table_expression> [ ,...n ] ]
INSERT
{
[ TOP ( expression ) [ PERCENT ] ]
[ INTO ]
{ <object> | rowset_function_limited
[ WITH ( <Table_Hint_Limited> [ ...n ] ) ]
}
{
[ ( column_list ) ]
[ <OUTPUT Clause> ]
{ VALUES ( { DEFAULT | NULL | expression } [ ,...n ] ) [ ,...n ]
| derived_table <<<<------- Look here ------------------------
| execute_statement <<<<------- Look here ------------------------
| <dml_table_source> <<<<------- Look here ------------------------
| DEFAULT VALUES
}
}
}
[;]
这应该适用于那里可用的任何其他RDBMS。记住所有产品IMO的所有语法是没有意义的。
以下是如何从多个表中插入。这个特定的示例是在多对多场景中有一个映射表:
insert into StudentCourseMap (StudentId, CourseId)
SELECT Student.Id, Course.Id FROM Student, Course
WHERE Student.Name = 'Paddy Murphy' AND Course.Name = 'Basket weaving for beginners'
(我意识到在学生姓名上进行匹配可能会返回不止一个值,但你明白这一点。当Id是身份列且未知时,需要在Id以外的其他值上进行匹配。)
如果您首先创建表,可以这样使用;
select * INTO TableYedek From Table
这将插入值,但与创建新的复制表不同。
INSERT INTO yourtable
SELECT fielda, fieldb, fieldc
FROM donortable;
这适用于所有DBMS
Try:
INSERT INTO table1 ( column1 )
SELECT col1
FROM table2
这是标准的ANSI SQL,适用于任何DBMS
它绝对适用于:
神谕MS SQL ServerMySQL数据库Postgres公司SQLite v3Teradata公司分布式数据库Sybase公司Vertica公司hsql数据库氢气AWS红移萨普哈纳谷歌扳手