我有一个带有整数值的表,我需要按列的总和进行查询:
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/