2

テーブルの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    ||
___________________________________________________

その後、SQL ステートメントは、またはmax_valueの最大値で更新されているはずです。このような:value1value2value3

___________________________________________________
|| 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    ||
___________________________________________________

誰でもこれについて MySQL クエリを教えてもらえますか?

4

3 に答える 3

5

NULL値をまたは好きな値に置き換える0必要があります。そうしないと、「不明な値」との比較で常に「不明な値」が返されます。

update table1 
set max_value = greatest(coalesce(value1, 0), coalesce(value2, 0), coalesce(value3, 0));

このcoalesce()関数は、最初のパラメーターを返します。not null

  • sqlfiddleでライブで動作するのを見てください
于 2013-08-08T09:47:51.887 に答える
4

GREATESTNULL必要な方法で相互作用しませんが、 UPDATE/はあまり複雑JOINにすることなくそれを行います。

UPDATE Table1 t1
JOIN (
  SELECT id,MAX(value) value FROM (  
    SELECT id,value1 value FROM Table1 UNION ALL 
    SELECT id,value2       FROM Table1 UNION ALL
    SELECT id,value3       FROM Table1
  ) g GROUP BY id
) a ON t1.id = a.id
SET t1.max_value=a.value;

でテストする SQLfiddle

于 2013-08-08T09:56:33.453 に答える