簡體   English   中英

SQL-使用同一表中其他多個行的值一次更新多個行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM