MySQL - 从行中的字段更新具有MAX或GREATEST值的列(不包括NULL)

Vol*_*cho 2 mysql null max

在MySQL中的表中mytable我想要UPDATE列max_value

查询表之前的示例如下:

___________________________________________________
|| id || value1 || value2 || value3 || max_value ||
___________________________________________________
|| 1  ||    1   ||   2    ||   3    ||   NULL    ||
===================================================
|| 2  ||    99  ||   2    ||   3    ||   NULL    ||
===================================================
|| 3  ||    1   ||   66   ||   66   ||   NULL    ||
===================================================
|| 4  ||    1   ||   2    ||  NULL  ||   NULL    ||
===================================================
|| 5  ||  NULL  ||  NULL  ||  NULL  ||   NULL    ||
___________________________________________________
Run Code Online (Sandbox Code Playgroud)

亚特的SQL语句max_value应该已经更新了最高值value1,value2value3.像这样:

___________________________________________________
|| id || value1 || value2 || value3 || max_value ||
___________________________________________________
|| 1  ||    1   ||   2    ||   3    ||     3     ||
===================================================
|| 2  ||    99  ||   2    ||   3    ||     99    ||
===================================================
|| 3  ||    1   ||   66   ||   66   ||     66    ||
===================================================
|| 4  ||    1   ||   2    ||  NULL  ||     2     ||
===================================================
|| 5  ||  NULL  ||  NULL  ||  NULL  ||   NULL    ||
___________________________________________________
Run Code Online (Sandbox Code Playgroud)

任何人都可以给我一个MySQL查询吗?

fan*_*nts 5

您必须NULL0您喜欢的值或任何值替换值,否则与"未知值"的比较总是返回"未知值".

update table1 
set max_value = greatest(coalesce(value1, 0), coalesce(value2, 0), coalesce(value3, 0));
Run Code Online (Sandbox Code Playgroud)

coalesce()函数返回其第一个参数not null