【发布时间】:2011-06-01 12:48:03
【问题描述】:
我正在尝试在两个表上执行内部联接,以便我可以按与另一个表中该值的 pid 关联的精度来舍入一个值。但是,它为 pid 3 返回 NULL。我相信它与 pid 2 的 NULL 精度有关,因为当我将其精度设置为非 NULL 值时,我在下面的查询中得到了 pid 3 的正确值。
我如何重构这个查询,即使另一个 pid 包含 NULL 精度,它也总是返回正确的值?
select pid_values.pid, pid_values.value, round(value, pids.precision)
from pid_values inner join pids on pid_values.pid = pids.pid;
+------+--------+------------------------------+
| pid | value | round(value, pids.precision) |
+------+--------+------------------------------+
| 1 | 10.123 | 10 |
| 2 | 5.5 | 6 |
| 3 | 3.1234 | NULL |
+------+--------+------------------------------+
两个表中的数据:
select * from pids;
+------+-----------+
| pid | precision |
+------+-----------+
| 1 | 0 |
| 2 | NULL |
| 3 | 1 |
+------+-----------+
select * from pid_values
+----+------+--------+
| id | pid | value |
+----+------+--------+
| 1 | 1 | 10.123 |
| 2 | 2 | 5.5 |
| 3 | 3 | 3.1234 |
+----+------+--------+
【问题讨论】:
-
听起来更像是 MySQL 中的一个错误......(另外,我实际上希望 pid = 2 的那个返回 null,基于 round() 应该在 null 上返回 null输入。)
-
实际上,一旦您将
NULL作为D传递给ROUND,所有后续对ROUND的调用(在该查询中)都会返回NULL。 -
所以,问题是:当
precision IS NULL时,您希望它返回什么?NULL,四舍五入为 0,或0?