首页 > 解决方案 > SQL UPDATE SET 列等于相关表中的 MIN 和 MAX 值

问题描述

我有两个表(T1 和 T2),我想更新:

因此基于示例图像的最终结果将如下所示:


1 阿巴斯 2014 空
2 交流 1990 2001
3 讴歌 1996 无效


以下是表格:

T1:

T1

T2:

T2

标签: mysqlsql

解决方案


您可以使用我的 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

推荐阅读