我试图在同一个表中找到一行中的两列中最小的数字,其中一列可能在特定行中为空.如果其中一列为空,我希望该行返回的另一列中的值为这种情况下最低的非空列.如果我在
MySQL 5.1中使用least()函数:
select least(1,null)
这返回null,这不是我想要的.在这种情况下,我需要查询返回1.
我已经能够得到我想要的结果一般这个查询:
select least(coalesce(col1,col2)),coalesce(col2,col1))
只要col1和col2都不为空,每个coalesce语句将返回一个数字,而最小()处理查找最低的.
解决方法
对于MysqL 5.0.13(
http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_least),不幸的是(对于您的情况)LEAST的行为已更改 – 仅当所有参数为NULL时,才会返回NULL.
这个变化甚至被报告为一个错误:http://bugs.mysql.com/bug.php?id=15610
但修复程序仅限于MysqL文档,解释新行为和兼容性中断.
您的解决方案是推荐的解决方法之一.另一个可以使用IF运算符:
SELECT IF(Col1 IS NULL OR Col2 IS NULL,COALESCE(Col1,Col2),LEAST(Col1,Col2))