回答
你還沒有告訴我們你的數據庫是什麼,但是這會爲SQL Server的工作。
update FirstTable
set f.FirstName = case when f.FirstName = s.MiddleName then s.FN else f.FirstName end,
f.LastName = case when f.LastName = s.MiddleName then s.FN else f.LastName end
from FirstTable f
inner join SecondTable s on f.FirstName = s.MiddleName or f.LastName = s.MiddleName
where s.FN <> 'aaa' -- Missed first time
我認爲它不會像其他RDBMs一樣正常工作。
編輯:添加了哪裏到SQL,和下面的說明:
查詢的形式爲:
update table1
set col1 = x.colN
from table1 t
inner join table2 x on some condition
這是在兩個部分更新+組線,並且從查詢這是一個完整的選擇語句沒有實際的選擇列列表。把第二個想象成以'select *'爲前綴。
第二部分(select語句的內容)必須使用與更新部分相同的表 - 上述框架中的問題和table1中的FirstTable。由於它選擇與更新相同的表中的行,因此它知道要更新哪些行,並使select部分中的列可用於更新部分。在框架中,我可以將table1中的col1設置爲table2中的colN。
您的問題有點複雜,因爲我不一定要更改名字或姓氏。要取FirstName,我想在FirstName = MiddleName時將FirstName更改爲FN。要做到這一點,我使用的情況下,作爲集的一部分:
set f.FirstName = case when f.FirstName = s.MiddleName then s.FN else f.FirstName end
這是說的時候名字=中間名,然後設置姓ØFN,否則將其設置爲姓(換句話說,不要改變它)。
爲LastName重複。
希望有所幫助。
(FN!= aaa)條件未被提及。你也可以解釋查詢嗎? – user5705451
是的,西蒙只錯過了'WHERE s.FN!='aaa''的情況。查詢首先執行連接,然後更新第一行中指定的表(您可以簡單地使用別名:'update f')。它將所有FirstName字段設置爲'case'返回的內容,其邏輯非常簡單:根據指定的條件返回's.FN'或'f.FirstName'。 – Andrew
編輯說明並添加缺少的地方(d'oh!) –
- 1. SQL組合選擇,更新並加入到一個查詢
- 2. 在單個查詢中插入,選擇和更新 - SQL
- 3. 在單個sql語句中插入和更新sql語句
- 4. 選擇並更新單個查詢
- 5. 在1個SQL語句中合併更新查詢
- 6. 加入兩個選擇語句SQL
- 7. 單個查詢中的多個SQL更新語句
- 8. SQL查詢選擇並更新
- 9. 從選擇語句Sql查詢更新表
- 10. 更新語句中具有選擇子查詢的嵌套SQL查詢
- 11. 合併/加入SQL選擇查詢
- 12. 在同一個PL/SQL查詢中選擇並更新
- 13. SQl更新並在一個查詢中選擇
- 14. 在SQL中選擇語句,聯接和重新使用查詢
- 15. 子查詢與更新語句在SQL
- 16. SQL - 插入語句與子查詢,然後更新語句
- 17. SQL Server在同一語句中選擇並更新?
- 18. SQL在一個查詢中有多個選擇計數語句
- 19. SQL更新和在單個查詢中選擇
- 20. 加入SQL更新並選擇
- 21. 更新值不包含在子查詢中選擇語句
- 22. Oracle更新並在單個查詢中選擇
- 23. 更新並在oracle 11g的單個查詢中選擇
- 24. 更新並在單個查詢中選擇
- 25. SQL加入查詢選擇
- 26. sql查詢選擇語句統計
- 27. SQL Oracle查詢 - 選擇語句
- 28. 在sql中選擇語句在sql中選擇語句
- 29. 選擇並插入一個查詢SQL
- 30. SQL更新查詢選擇查詢
哪'RDBMS'您使用的是 –
可能的複製[更新和在一個查詢中選擇(http://stackoverflow.com/questions/4057244/update-and-select-in-one-query) –
SQL @ VR46 ..這種情況下不可用 – user5705451