[英]SQL - Update multiple rows at once with values from multiple other rows in the same table
如果已被問到,我事先表示歉意,我嘗試搜索但找不到完全匹配的內容。
基本上,我有一個包含主題的表。 使用下面的代碼片段粗略了解表格的設置方式。
theme_name field_name color
'Default' 'Header' 'Orange'
'Default' 'Footer' 'Orange'
'Default' 'Body' 'Orange'
'Newtheme 'Header' 'Red'
'Newtheme' 'Footer' 'White'
'Newtheme' 'Body' 'Blue'
基本上,我需要做的是編寫一個查詢,該查詢更新theme_name每行默認值“ color”字段中的值,以匹配Newtheme行中相應值的值。 換句話說,最后應該是這樣的:
theme_name field_name color
'Default' 'Header' 'Red'
'Default' 'Footer' 'White'
'Default' 'Body' 'Blue'
'Newtheme 'Header' 'Red'
'Newtheme' 'Footer' 'White'
'Newtheme' 'Body' 'Blue'
不幸的是,表上沒有具有相同theme_name的每一行的統一ID號,我無法創建一個。
現在,每個主題在實際表中的行都比我給出的示例多得多。 我可以寫使用
SET value=(Select value
from Table
where theme_Name='Newtheme')
where theme_name='Default'
and field_name='Header'`
那將修復一行。 然后,我可以為每一行重復該更新語句。 但是,我懷疑有一種更快的方法來執行此操作,在這里我可以在一個更新語句中更新所有這些方法。 我只是不知道那是什么。
希望我的要求是合理的。 先感謝您。
看起來像一個簡單的,相關的UPDATE查詢:
update the_table
set color = (select color
from the_table t2
where t2.theme_name = 'NewTheme'
and t2.field_name = the_table.field_name)
where theme_name = 'Default';
如果(theme_name, field_name)
不是唯一的,則失敗
您可以使用自我聯接來做到這一點。 請嘗試以下操作:
update a
set a.color = b.color
from themes a
join themes b on a.field_name = b.field_name and a.them_name <> b.theme_name
where a.theme_name = 'Default'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.