Mysql更新字段,其中最大值介于2个其他字段之间

时间:2016-11-24 16:53:34

标签: mysql max

在我的mysql表中,我有3个字段:weight,gweight,volweight

gweight和volweight有不同的值,我想用gweight和volweight之间的最大值更新权重。 感谢

1 个答案:

答案 0 :(得分:1)

UPDATE myTable
SET weight=GREATEST(gweight,volweight);

警告这会更新每一行。

请参阅GREATEST()的手册页。

其他注意事项:

CREATE TABLE xxx2
(   id int auto_increment primary key,
    col1 int null,
    col2 int null,
    col3 int null
);

INSERT xxx2(col1,col2) values (null,1),(1,2);

UPDATE xxx2
SET col3=GREATEST(col1,col2);
SELECT * FROM xxx2;
+----+------+------+------+
| id | col1 | col2 | col3 |
+----+------+------+------+
|  1 | NULL |    1 | NULL |
|  2 |    1 |    2 |    2 |
+----+------+------+------+

因此,列中的NULL不会带来快乐GREATEST()。如果您的列不是NULLABLE,则不必担心上述情况,您可以忽略以下修复:

TRUNCATE xxx2;
INSERT xxx2(col1,col2) values (null,1),(1,2);

UPDATE xxx2
SET col3=GREATEST(COALESCE(col1,0),COALESCE(col2,0));
SELECT * FROM xxx2;
+----+------+------+------+
| id | col1 | col2 | col3 |
+----+------+------+------+
|  1 | NULL |    1 |    1 |
|  2 |    1 |    2 |    2 |
+----+------+------+------+

所以COALESCE()会修复NULL问题。