Sql-Server
僅使用外鍵條件更新表中最舊的條目
我在一個論壇網站上工作。
我想要做的是更新執行緒標題和內容(第一篇文章),它們位於不同的表中 - “執行緒”和“文章”。
“執行緒”
“文章”
我不確定如何僅更新“文章”中最舊的條目,其中“文章”中的外鍵與執行緒中的 ID 匹配。
我從來沒有真正嘗試過帶有子查詢的高級 UPDATE 語句,這還不是我最強的技能之一。
這是我嘗試過的(更新了“文章”表中的所有行):
UPDATE Threads SET Title = @ThreadTitle WHERE Id = @Id; UPDATE Posts SET Content = @Content WHERE (SELECT TOP 1 FkThreadId FROM Posts WHERE FkThreadId = @Id ORDER BY CreationTime ASC)= @Id
也可以更新連接表而不是使用 2 個語句,還是編寫 2 個單獨的語句更好?
版本:
Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) 2012 年 12 月 28 日 20:23:12 版權所有 (c) Microsoft Corporation Express Edition (64-bit) on Windows NT 6.1 (Build 7601: Service Pack 1)
是的,您的查詢將更新
posts
. 您必須包含一個將更新限制為一行的條件。一種方法:UPDATE Posts SET Content = @Content WHERE Id = (SELECT TOP 1 Id FROM Posts WHERE FkThreadId = @Id ORDER BY CreationTime ASC) ;
在 SQL-Server 中,您不能在一個語句中更新兩個表,因此您必須使用兩個語句。不過,您可以將它們放在事務中,因此它們被視為原子,它們要麼成功要麼失敗。