我有一个带有整数值的表,我需要按列的总和进行查询:

    id, A, B, C
    1, 21, 32, null
    2, 9, 0, 124
    3, null, null, 6

SELECT * FROM tbl WHERE B+C > 50


这是行不通的,因为不允许添加null。当前的实现是将所有null都设置为0,并为每列添加一个单独的列,以说明0实际上是否意味着null:

id, A, B, C, A_null, B_null, C_null
1, 21, 32, 0, false, false, true
2, 9, 0, 124, false, false, false
3, 0, 0, 6, true, true, false


我认为这不是很优雅,而是想使用ifnull函数:

SELECT * FROM tbl WHERE ifnull(B,0)+ifnull(C,0) > 50


这会带来很大的性能损失或其他缺点吗?

该表有数百万行。

最佳答案

您可以随时使用

    isnull(column_name ,0)


这会将0插入到空值中,然后再对它们求和。

ifnull和isull之间的区别-ifnull接受两个参数;如果值是null,则为1,如果值不为1,则为1。

isnull只是将一个值插入所有null值中,我认为对于这个问题,它会更简单。

关于mysql - mysql ifnull(...)是否会妨碍索引的使用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46485460/

10-11 12:52