mysql - SQL UPDATE SET 列等于相关表中的 MIN 和 MAX 值
问题描述
我有两个表(T1 和 T2),我想更新:
- T1
start_year
基于 T2start_year
最小值,其中使 ID 匹配 - T1
end_year
基于 T2end_year
最大值,其中使 ID 匹配
因此基于示例图像的最终结果将如下所示:
1 阿巴斯 2014 空
2 交流 1990 2001
3 讴歌 1996 无效
以下是表格:
T1:
T2:
解决方案
您可以使用我的 sqlupdate ... join ... set
语法,在t2
. 考虑以下查询:
update t1
inner join (
select
make_id,
min(start_year) min_start_year,
max(end_year) max_end_year
from t2
group by make_id
) t2 on t2.make_id = t1.id
set t1.start_year = t2.min_start_year, t1.end_year = t2.max_end_year
从评论中编辑:如果 t2 中的任何 end_year 为 null,则将 end_year 设置为 null:
update t1
inner join (
select
make_id,
min(start_year) min_start_year,
max(end_year) max_end_year,
max(end_year is null) end_year_has_null
from t2
group by make_id
) t2 on t2.make_id = t1.id
set
t1.start_year = t2.min_start_year,
t1.end_year = case
when t2.end_year_has_null then null
else t2.max_end_year
end
推荐阅读
- forms - VBScript 找不到 WindowSystemObject 类,错误代码 80020009(Windows 10、20H2)
- java - 为什么我的 PBKDF2 散列方法返回不同的输出?
- html - 从html转换pdf页面时如何在pdf页面周围添加边框
- pg-promise - 时间戳精度截止
- docker - 如何使用 Wireguard 设置双 VPN?
- android - 为什么 react-native 中的 GET-request 不起作用?
- arrays - 循环遍历 MIPS 中的地址字数组
- python - 负十六进制表示
- oracle - 范围的验证触发器 - Oracle
- python-3.x - 在 Python 中切片列表时的奇怪行为