使用INSERT ... SELECT
INSERT的这种变体如何工作(请参阅链接)?使用INSERT ... SELECT
http://www.sqlteam.com/article/using-select-to-insert-records
INSERT california_authors (au_id, au_lname, au_fname)
SELECT au_id, au_lname, au_fname
FROM authors
WHERE State = 'CA'
还可以将其用于替换的插入和更新?如果能以这种方式使用,是否仅限于插入静态值(选择value1 = blah ...)还是有办法传递NOW()值?
它插入数据与列名表california_authors AU_ID,的au_lname,au_fname它SELECT语句select au_id, au_lname, au_fname from authors where state = 'CA'
上面的select语句为您提供了3列的表,插入列匹配得到它的数据数。
说你有表(生日)
ID |名字|生日
那么你可以做一个插入这样
insert birthdates (id,firstname,birthdate) select 1,'Steven',NOW()
这将插入新行与定义的值生日。
您也可以结合使用从将和在选择
该行定义的值“静态”插入数据获取从表中的数据从SELECT
查询返回被简单地插入,就像如果你要使用一组VALUES
表达式自己指定所有行。在两种情况下,字段数和类型都应该匹配。
是的,因为你有一个表像ARTICLES(ID, TITLE, BODY, DATE)
和你想要的DATE
字段插入期间被设置为NOW()
,你可以做这样的事情:
INSERT articles(title, body, date)
SELECT title, body, NOW()
FROM other_articles
随后的NOW()
值会而不是other_articles
表中的日期列。
插入无法执行更新 - 它只能将数据插入表中,而不更新现有数据。
它不限于静态值。
Insert Into SomeTable (FirstName, LastName, FullName, ModifiedDate, Comment, Age)
Select FirstName,
LastName,
FirstName + ' ' + LastName,
GetDate(),
'This is the best comment ever',
dbo.CustomFunctionToCalculateAge(DateOfBirth)
From Users
您也可以省略列声明(但不推荐)
Insert Into Ages
Select 10
你应该始终确保正被插入的数据类型的列的数据类型相匹配。
“插入无法执行更新”。是和不是。我已经讨论了MySQL变体INSERT INTO ... ON DUPLICATE KEY UPDATE Ages = 10。尽管如此,它的用处有点不妥。 – 2011-08-04 14:28:49