sql - 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'`
那将修复一行。然后我可以为每一行重复该更新语句。但是,我怀疑有一种更快的方法可以做到这一点,我可以在一个更新语句中更新所有这些。我只是不知道它是什么。
希望我的要求是有道理的。先感谢您。
解决方案
看起来像一个简单的相关 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)
不是唯一的,这将失败
推荐阅读
- angular - 我无法比较 Angular 组件测试中的日期
- python - 如何在以“;”分隔的字符串中选择多个元素 和“,”在数据框中?
- angular - 根据来自另一服务的 Id 从一个服务中检索 Id 的值
- asp.net-mvc - 找不到 ASP 核心路由 POST 页面
- mysql - MySQL:查找可能为 NON NULL 的 NULLable 列
- mediadevices - 如何从手机下载文件?MediaDevices device.DownloadFile() 方法抛出 Not Implmented 异常
- javascript - 找出另一个页面上的哪个链接被点击进入当前页面?
- javascript - 在 WHERE 子句 MySQL/Node 中使用变量
- python - 取消堆叠在一列中具有重复值的数据框
- c++ - 使用 Visual Studio 2017 为 Windows 设置 GRPC CPP