【原创】sql:慎用【数字字段1 - 数字字段2】这样的sql(10-null = null)mysql

时间:2021-11-11 15:55:55

如果只有一个表的情况下

a表:

id  num1,num2

1  10    5

2  10    0

3  20    0

select id, num1,num2,num1 - num2 AS subNum from a;

这种情况下:

结果如下:

id  num1  num2  subNum

1  10    5      5

2  10    0      10

3  20    0      20

单表情况下,这样在sql中,使用减号“-”是没有问题的(数字字段,必须不能为null),如果有字段为null,那么减之后的结果也为null,例:10 - null = null

但是如果是2张以上的表进行关联,即使每个表的字段都不为null,但是,左关联,右表中的记录如果没有,则为null

表b:

id  num3

1   5

3   0

select a.id, b.id, a.num1, b.num3, a.num1 - num3 AS subNum from a a

left join b b on a.id=b.id

结果:

id  id num1 num3  subNum

1  1   10   5      5

2  null    null      null

以上,原本我需要的是id=2的时候,subNum = 10,结果是null了。

此时使用左连接,就不能使用减了,就要在程序里面处理了。