首页 > 解决方案 > 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 default 的每一行的“颜色”字段中的值,以匹配Newtheme 行上的相应值。换句话说,它最后应该是这样的:

theme_name  field_name  color  
'Default'   'Header'    'Red' 
'Default'   'Footer'    'White'
'Default'   'Body'      'Blue'
'Newtheme   'Header'    'Red' 
'Newtheme'  'Footer'    'White'
'Newtheme'  'Body'      'Blue' 

不幸的是,对于具有相同主题名称的每一行,表上没有统一的 ID 号,我无法创建一个。

现在,每个主题在实际表格中的行数都比我给出的示例多得多。我可以写使用

SET value=(Select value 
           from Table 
           where theme_Name='Newtheme') 
where theme_name='Default' 
  and field_name='Header'`

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

希望我的要求是有道理的。先感谢您。

标签: sql

解决方案


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


推荐阅读