我有一个非常简单的问题,是否可以使用一个更新语句更新具有新值的表。SQL更新帮助
说例如我有一个作者,标题,日期,流行度表。现在我得到了一些具有作者姓名的新数据,标题对应着新的人气。我如何在一个声明中更新表格。请注意作者和标题不是唯一的。
我有一个非常简单的问题,是否可以使用一个更新语句更新具有新值的表。SQL更新帮助
说例如我有一个作者,标题,日期,流行度表。现在我得到了一些具有作者姓名的新数据,标题对应着新的人气。我如何在一个声明中更新表格。请注意作者和标题不是唯一的。
您可以使用Oracle的MERGE语句做一个单独的语句:
MERGE DestinationTable target
USING (
Select 'Briggs' Author, 'My Next Master' Title, 6 Popularity
Union All Select 'Millis', 'Man up, Nut head', 3
) Z
ON Z.Author = target.Author
And Z.Title = target.Title
WHEN MATCHED THEN
UPDATE SET target.Popularity = Z.Popularity
WHEN NOT MATCHED THEN
Insert(Author, Title, Popularity) Values(Z.Author, Z.Title, Z.Popularity);
如果我正确认识你,这样的事情应该工作:
update books set popularity=? where author=? and title=?
...其中?
是一个占位符。
编辑:根据你的评论,你想创建它,如果它不存在,并更新它,如果它。我不认为你可以用一个陈述来做到这一点,但我可能是错的。在两个语句,你可以使用它来检查,如果它已经存在:
select count(*) from books where author=? and title=? limit 1
这将输出1,如果它存在,或者如果它没有0。从那里你可以选择是否插入或更新。
由于我发布了评论,我也会发布一个答案。 @icktoofay发布一个解决方案,但使用this link我们可以遵循,它实际上会导致表扫描,这样反而尝试的耶利米·克拉克的解决方案:
UPDATE Table1 SET (...) WHERE Column1='SomeValue'
IF @@ROWCOUNT=0
INSERT INTO Table1 VALUES (...)
注意,这会先尝试更新,如果成功, @@ROWCOUNT
将会是1或更多,但我假设您将使用T-SQL(Microsoft的SQL语言)。我不知道其他任何平台都支持@@ROWCOUNT
。
嘿。我无法正确写出评论,所以我把它写成了答案。你可以请看看它,让我知道如果有可能或没有。谢谢。 – 2010-06-09 03:43:04
我在SQL Anywhere中使用这个(不知道你正在使用的数据库管理系统,虽然)
INSERT INTO "books" ("title", "author", "popularity") ON EXISTING UPDATE VALUES(?,?,?);
因此,如果记录存在,它只是更新它。否则,创建一个新的记录。
我认为我们也需要了解他的平台...我会在这个问题上再添加一个评论 – jcolebrand 2010-06-08 23:09:48
是的,如果'ON EXISTING UPDATE'是一个供应商扩展或者不是我的头顶, 。 – 2010-06-08 23:11:12
在MySQL中,你有一个命令调用一些所谓的“对重复密钥更新”,我发现了同样的甲骨文公司(其称为合并)
看看这篇文章
http://blog.mclaughlinsoftware.com/2009/05/25/mysql-merge-gone-awry/
和欢呼声, sameera
你的意思是“插入值,如果它不存在或更新,如果它的存在”?或者你只想更新现有记录?如果是这样,@icktoofay有答案。 – jcolebrand 2010-06-08 22:56:49
如果没有值,那么我们需要插入它,如果它存在..然后更新它。 – 2010-06-08 22:59:34
〜什么SQL平台? T-SQL(微软),MySQL,甲骨文,NoSQL等... – jcolebrand 2010-06-08 23:10:08