SQL中not in有Null值时
类别:数据库 浏览量:1668
时间:2016-6-20 SQL中not in有Null值时
SQL中not in有Null值时一、实例数据
Table_A表和Table_B表
CREATE TABLE [dbo].[Table_A](
[ID] [nchar](10) NULL,
[Name] [nchar](10) NULL
) ON [PRIMARY]
GO
ID Name
001 张三
002 李四
003 王五
CREATE TABLE [dbo].[Table_B](
[ID] [nchar](10) NULL,
[Name] [nchar](10) NULL
) ON [PRIMARY]
GO
ID Name
NULL 张三
002 李四
NULL 王五
二、查询出在Table_A表中不在Table_B表中的记录
1、错误SQL写法 (没有任何结果返回)
SELECT *
FROM dbo.Table_A AS a
WHERE a.ID NOT IN ( SELECT b.ID
FROM dbo.Table_B AS b)
2、错误原因
(1)、如果null参与算术运算,则该算术表达式的值为null。(例如:+,-,*,/ 加减乘除)
(2)、如果null参与比较运算,则结果可视为false。(例如:>=,<=,<> 大于,小于,不等于)
(3)、如果null参与聚集运算,则聚集函数都置为null。除count(*)之外。
(4)、如果在not in子查询中有null值的时候,则不会返回数据。
例如
SELECT *
FROM dbo.TableA AS a
WHERE a.id NOT IN ( 2, NULL )
--等同于:
SELECT *
FROM Table_A AS a
WHERE a.id <> 2
AND a.ID <> NULL
--由于NULL值不能参与比较运算符,导致条件不成立,查询不出来数据。
3、正确SQL写法
--写法1
SELECT *
FROM dbo.Table_A AS a
WHERE a.ID NOT IN ( SELECT b.ID
FROM dbo.Table_B AS b
WHERE b.ID IS NOT NULL ) --排除NULL值参与运算符比较
--写法2
SELECT *
FROM dbo.Table_A AS a
WHERE NOT EXISTS ( SELECT *
FROM dbo.Table_B AS b
WHERE a.ID = b.ID )
标签:SQL
您可能感兴趣
- sqlserver代理无法启动错误1607(SQL Server代理:理解SQL代理错误日志处理方法)
- mysql重启启动失败(MySQL8.0无法启动3534的解决方法)
- 搭建php和mysql的运行环境(Windows环境开发PHP完整配置教程Apache+Mysql+PHP)
- sql server 2014配置文件路径(SQL Server 2012 FileTable 新特性详解)
- mysql添加注释视图(mysql创建表添加字段注释的实现方法)
- SQL语句中单引号
- mysql安装时服务无法启动(MySQL 实例无法启动的问题分析及解决)
- sqlserver技术文档(sql server2016里面的json功能浅析)
- sqlserver 多实例怎么算许可(SQL Server使用row_number分页的实现方法)
- mysql建立分区表指令(MySQL高级特性——数据表分区的概念及机制详解)
- 修改sqlserver数据库名称步骤(SQL server数据库创建代码 filegroup文件组修改的示例代码)
- python中怎么连接mysql(python远程连接MySQL数据库)
- sql server 共享锁
- sql两列数据快速对比(在sql中对两列数据进行运算作为新的列操作)
- sqlserver存储删除过程(Sql中存储过程的定义、修改和删除操作)
- sql server代理无法启动服务(SQL Server作业失败:无法确定所有者是否有服务器访问权限的解决方法)
- 焕然一新 成都轨道集团官方网站改版上线(成都轨道集团官方网站改版上线)
- 成都轨道交通19号线二期全线电通(成都轨道交通19号线二期全线电通)
- 19号线二期全线电通 轨道交通项目最新进展来了(19号线二期全线电通)
- 涉及3条地铁线路 成都这4座轨道交通站点有新名字了(涉及3条地铁线路)
- 来了 成都轨道交通5条线路刷新 进度条(成都轨道交通5条线路刷新)
- 一部手机两套系统 OPPO Find X3的正确打开方式你知道吗(一部手机两套系统)
热门推荐
- laravel图文分离(Laravel 5.4前后台分离,通过不同的二级域名访问方法)
- dede搜索模块下载(dede会员列表调用适用于企业、个人)
- HttpWebResponse类的属性和方法
- qgis 如何平滑折线(Sqlview动态发布地图图层的方法)
- 用mysql编写test数据库(MySQL制作具有千万条测试数据的测试库的方法)
- web前端怎么设置容器(Web应用中设置Context Path案例详解)
- python中匿名函数关键字(浅谈python之高阶函数和匿名函数)
- sql server代理无法启动服务(SQL Server作业失败:无法确定所有者是否有服务器访问权限的解决方法)
- kettle替换sql语句(sql server定时作业调用Kettle job出错的快速解决方法)
- python怎么安装queue(python队列Queue的详解)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9