我有一個非常簡單的問題,是否可以使用一個更新語句更新具有新值的表。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