ANSI SQL问题 – 如果记录已存在,如何插入或更新记录?
发布时间:2020-05-24 16:51:12 所属栏目:MsSql 来源:互联网
导读:虽然我使用mySQL(现在),但我不想要任何特定于数据库的SQL. 我试图插入一个记录,如果它不存在,并更新一个字段,如果它存在.我想使用ANSI SQL. 该表看起来像这样: create table test_table (id int, name varchar(16), weight double) ;//test data insert into
|
虽然我使用mySQL(现在),但我不想要任何特定于数据库的SQL. 我试图插入一个记录,如果它不存在,并更新一个字段,如果它存在.我想使用ANSI SQL. 该表看起来像这样: create table test_table (id int,name varchar(16),weight double) ; //test data insert into test_table (id,name,weight) values(1,'homer',900); insert into test_table (id,weight) values(2,'marge',85); insert into test_table (id,weight) values(3,'bart',25); insert into test_table (id,weight) values(4,'lisa',15); If the record exists,I want to update the weight (increase by say 10) 解决方法很长一段时间,这个操作需要两个单独的命令加上一些框架来处理它.因此名称为UPSERT(UPdate或inSERT).但是最新版本的某些DBMS支持更优雅的解决方案.ANSI标准定义了a MERGE syntax.自2005年以来,Oracle在版本9i和MS SQL Server中都支持这种做法.MERGE语句可能有点冗长. merge into t23
using t42
on t42.id = t23.id
when matched then
update
set t23.col1 = t42.col1
when not matched then
insert (id,col1)
values (t42.id,t42.col1)
/
我认为MERGE语句主要被设想为数据迁移工具,因此其语法要求我们在USING子句中从表中选择数据.我们可以通过从行生成设备(例如Oracle中的dual)中选择文字和伪列来解决此限制. MySQL的语法略有不同,INSERT … ON DUPLICATE KEY UPDATE. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
