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

如果只有一个表的情况下

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 10   null      null

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

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

时间: 2024-10-21 14:55:29

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

SQL Server 2008 R2——使用数字辅助表(master..spt_values)实现用计数字段对记录进行重复显示

原文:SQL Server 2008 R2--使用数字辅助表(master..spt_values)实现用计数字段对记录进行重复显示 =================================版权声明================================= 版权声明:原创文章 谢绝转载  请通过右侧公告中的“联系邮箱([email protected])”联系我 勿用于学术性引用. 勿用于商业出版.商业印刷.商业引用以及其他商业用途. 本文不定期修正完善. 本文链接:http:

SQLServer 2008 R2 对同时含有数字和中文的字段进行排序

若是数据库中的某一个字段名为bedNO,类型为nvchar,里面有{1,2,3,11,12,23,加2,加3}这些数据. 此时我需要对这些数据进行排序,数字按大小拍前面,汉字按第一个字拼音首字母的顺序排后面,即需要1,2,3,11,12,23,加2,加3这样的结果. 通常用order by bedNO排序的话,得到的结果是:1,11,12,2,23,3,加2,加3,无法得到需要的顺序. 若是用order by cast(bedNO as int),则加2和加3这样的数据会报错,因为无法转换成in

取得NSDate实例各个字段的数字

代码: 1 NSDate *now = [NSDate date]; 2 NSCalendar *calendar = [NSCalendar currentCalendar]; 3 4 //获取年.月.日.时.分.秒等组件 5 NSDateComponents *dateComponents = [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHo

Mysql的varchar字段按照数字来排序

今天遇到个关于排序的问题,当时建了个表,表中的宽的字段用varchar来存储,因为可能要存储单位所以没有用int存储.但后期改了需求说是不用录入单位了,当时想着反正都能用也就没有修改字段类型,保留了varchar. 下面是正题: 这是未排序时的显示 现在把它升序排序 发现排序出现问题,1000在120的前面,解决这个问题只需要转换类型就行了,排序的字段+0就可以转换 Sql: select rule from th_steel order by rule+0 asc; 也可以用mysql的函数来

程序员的SQL经典笔记1_自动增长字段

自动增长字段在设计数据库的时候,有时需要表的某个字段是自动增长的,最常使用自动增长字段的就是表的主键,使用自动增长字段可以简化主键的生成.不同的DBMS中自动增长字段的实现机制也有不同,下面分别介绍. MYSQL 中设定一个字段为自动增长字段非常简单,只要在表定义中指定字段为AUTO_INCREMENT即可.例子: create table t_student ( t_id int primary key auto_increment, t_name varchar(50), t_age int

Mysql数据库里面的String类型依照数字来排序以及按时间排序的sql语句

今天做项目的时候,遇到个小小的问题,在数据库中查询的时候,要用String类型的ID进行一下排序!(注:ID字段为 varchar 类型) 解决的方法: 如: Sql代码 SELECT * FROM  Student WHERE 1 = 1 ORDER BY -ID DESC 或者: Sql代码 SELECT * FROM  Student WHERE 1 = 1 ORDER BY (ID + 1) mysql时间格式化,按时间段查询MYSQL语句   2011-04-15 09:01:08| 

Mysql数据库里面的String类型按照数字来排序以及按时间排序的sql语句

今天做项目的时候,遇到个小小的问题,在数据库中查询的时候,要用String类型的ID进行一下排序!(注:ID字段为 varchar 类型) 解决办法: 如: Sql代码 SELECT * FROM  Student WHERE 1 = 1 ORDER BY -ID DESC 或者: Sql代码 SELECT * FROM  Student WHERE 1 = 1 ORDER BY (ID + 1) mysql时间格式化,按时间段查询MYSQL语句   2011-04-15 09:01:08| 

7. SQL -- 创建数据库(表,字段)

数据库中的所有数据存储在表中.数据表包括行和列.列决定了表中数据的类型.行包含了实际的数据. 例如,数据库pubs中的表authors有九个字段.其中的一个字段名为为au_lname,这个字段被用来存储作者的名字信息.每次向这个表中添加新作者时,作者名字就被添加到这个字段,产生一条新记录. 通过定义字段,你可以创建一个新表.每个字段有一个名字和一个特定的数据类型(数据类型在后面的"字段类型"一节中讲述),例如字段au_lname存储的是字符型数据.一个字段也可以存储其它类型的数据. 使

MS SQL巡检系列——检查外键字段是否缺少索引

前言感想:一时兴起,突然想写一个关于MS SQL的巡检系列方面的文章,因为我觉得这方面的知识分享是有价值,也是非常有意义的.一方面,很多经验不足的人,对于巡检有点茫然,不知道要从哪些方面巡检,另外一方面,网上关于MS SQL巡检方面的资料好像也不是特别多.写这个系列只是一个分享,自己的初衷是一个知识梳理.总结提炼过程,有些知识和脚本也不是原创,文章很多地方融入了自己的一些想法和见解的,不足和肤浅之处肯定也非常多,抛砖引玉,也希望大家提意见和建议.补充,指正其中的不足之处.Stay Hungry