我有一个包含整数值的表,我需要按列总和进行查询:
id, A, B, C
1, 21, 32, null
2, 9, 0, 124
3, null, null, 6
SELECT * FROM tbl WHERE B+C > 50
这不起作用,因为不允许添加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
这是否会带来很大的性能损失或其他缺点?
该表有数百万行。
答案 0 :(得分:0)
您可以随时使用
isnull(column_name ,0)
这将在空值中插入0,然后它将允许您对它们进行求和。
ifnull和isnull之间的区别 - ifnull有两个参数;如果值为null,则为1;如果不是,则为1。
isnull只是简单地将一个值插入到所有空值中,我认为这个问题会更加简单。