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

时间:2018-09-06 19:53:24

标签: sql

如果已被问到,我提前道歉,我尝试搜索但找不到完全匹配的内容。

基本上,我有一个包含主题的表。使用下面的代码片段粗略了解表格的设置方式。

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'`

这将修复一行。然后,我可以为每一行重复该更新语句。但是,我怀疑有一种更快的方法来执行此操作,在这里我可以在一个更新语句中更新所有这些方法。我只是不知道那是什么。

希望我的要求很合理。先感谢您。

2 个答案:

答案 0 :(得分:1)

看起来像一个简单的,相关的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)不是唯一的,则失败

答案 1 :(得分:0)

您可以使用自联接来执行此操作。请尝试以下操作:

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'
相关问题