如果已被问到,我提前道歉,我尝试搜索但找不到完全匹配的内容。
基本上,我有一个包含主题的表。使用下面的代码片段粗略了解表格的设置方式。
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'`
这将修复一行。然后,我可以为每一行重复该更新语句。但是,我怀疑有一种更快的方法来执行此操作,在这里我可以在一个更新语句中更新所有这些方法。我只是不知道那是什么。
希望我的要求很合理。先感谢您。
答案 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'