SQL 中 NOT IN 查询不到数据
一、问题
用以下sql语句查询数据,结果为空
SELECT a.ID ,
a.Sub_Project_Name ,
a.Sub_Project_Type
FROM TB_KYSubProject a
WHERE a.ID NOT IN (
SELECT DISTINCT c.SubprojectID
FROM TB_KYGrogramme c
WHERE ISNULL(c.Belong_Programme, '') <> ''
AND c.Belong_Programme IN ( SELECT ConfigValue
FROM PB_Config
WHERE ConfigKey = '子项目共有所属方案' ) )

但是查询TB_KYGrogramme和TB_KYSubProject都有数据,TB_KYSubProject比TB_KYGrogramme的数据还多,不应该没数据
TB_KYGrogramme
SELECT DISTINCT c.SubprojectID
FROM TB_KYGrogramme c
WHERE ISNULL(c.Belong_Programme, '') <> ''
AND c.Belong_Programme IN ( SELECT ConfigValue
FROM PB_Config
WHERE ConfigKey = '子项目共有所属方案' )

TB_KYSubProject
SELECT DISTINCT a.ID
FROM TB_KYSubProject a

后面筛选TB_KYGrogramme,有一条数据SubprojectID是NULL
SELECT DISTINCT c.SubprojectID
FROM TB_KYGrogramme c
WHERE ISNULL(c.Belong_Programme, '') <> ''
AND c.Belong_Programme IN ( SELECT c.ConfigValue
FROM PB_Config c
WHERE c.ConfigKey = '子项目共有所属方案' )
AND c.SubprojectID IS NULL

二、原因
SELECT 1 AS id ,
1 AS subprojectid
UNION
SELECT 2 AS id ,
2 AS subprojectid
UNION
SELECT 3 AS id ,
3 AS subprojectid
UNION
SELECT 4 AS id ,
NULL AS subprojectid
SELECT *
FROM ( SELECT 1 AS id ,
1 AS subprojectid
UNION
SELECT 2 AS id ,
2 AS subprojectid
UNION
SELECT 3 AS id ,
3 AS subprojectid
UNION
SELECT 4 AS id ,
NULL AS subprojectid
) vv
WHERE subprojectid NOT IN ( 1, NULL )
等同
SELECT *
FROM ( SELECT 1 AS id ,
1 AS subprojectid
UNION
SELECT 2 AS id ,
2 AS subprojectid
UNION
SELECT 3 AS id ,
3 AS subprojectid
UNION
SELECT 4 AS id ,
NULL AS subprojectid
) vv
WHERE subprojectid <> 1
AND subprojectid <> NULL
NULL值不能参与比较运算符,要筛选非NULL数据,要用 is not null,而不能用<>NULL,具体看下数据库中的三值逻辑(Tree-Value-Logic)。
所以子查询有结果是NULL,那查询条件为空
三、方法
知道问题原因,对sql语句修改,把SubprojectID是NULL的数据排查
SELECT a.ID ,
a.Sub_Project_Name ,
a.Sub_Project_Type
FROM TB_KYSubProject a
WHERE a.ID NOT IN (
SELECT DISTINCT c.SubprojectID
FROM TB_KYGrogramme c
WHERE ISNULL(c.Belong_Programme, '') <> ''
AND c.Belong_Programme IN ( SELECT ConfigValue
FROM PB_Config
WHERE ConfigKey = '子项目共有所属方案' ) AND c.SubprojectID IS NOT NULL)

开发中遇到该问题记录下
SQL 中 NOT IN 查询不到数据的更多相关文章
- SQL 中 not in 查询不到数据问题
在开发的过程中,遇到过not in 始终查询不到数据问题 select * from T_CustomerInfo where CustomerID not in (select CustomerID ...
- 在SQL中直接把查询结果转换为JSON数据
下面这篇中,已经有准备一些数据: <MS SQL server对象类型type>https://www.cnblogs.com/insus/p/10903916.html 为前端服务,直接 ...
- C#EF中,使用类似于SQL中的% 模糊查询
最近在做项目的时候需要使用到模糊查询,但是后台使用EF写的 而不是ADO或者是Dapper,如果是这样的话,我们就可以使用Sql语句直接进行模糊查询 现在我们需要在LINQ中使用类似于模糊查询 在EF ...
- SQL中一次插入多条数据
SQL中insert一次可以插入一条数据,我们有三种方法可以一次性插入多条数据. 1. 语法:select 字段列表 into 新表 from 源表 注意事项:此种方法新表是系统自动创建,语句执行前不 ...
- SQL中的子查询
目录 WHERE子查询 HAVING子查询 FROM子查询 SELECT子查询 EXISIT子查询 查询薪资排名的员工信息(面试) z子查询就是将一个查询(子查询)的结果作为另一个查询(主查询)的数据 ...
- SQL中多条件查询括号的用途
界面: 代码 0 posted @ 2009-12-15 13:28 唔愛吃蘋果 阅读(8640) 评论(0) 编辑 收藏
- SQL 中的连接查询
关于SQL的应用,肯定离不开查询,而相对复杂的查询,总是离不开对表的连接,单个表操作的并不罕见,但是在应用环境大多数的查询都是针对2.3个表甚至更多的表7,至于连接,有内连接.外链接.交叉连接之分,每 ...
- SQL中常用模糊查询的四种匹配模式&&正则表达式
执行数据库查询时,有完整查询和模糊查询之分.一般模糊语句如下:SELECT 字段 FROM 表 WHERE 某字段 Like 条件 其中关于条件,SQL提供了四种匹配模式:1.%:表示任意0个或多个字 ...
- SQL中的连接查询及其优化原则
连接查询是SQL的主要任务,只有很好的掌握了连接查询及其优化方法才算是掌握了SQL的精髓所在.最近在面试中遇到了有关连接查询的问题,感觉回答的不是很好,总结一下. 具体示例请参考:http://www ...
随机推荐
- django QQ认证登录
一.开发环境 django 1.10.2 python3.5.2 django-social-auth 0.3.6 二.申请QQ互联 APPID及SECRECT_KEY 大致步骤: 1.成为QQ互联开 ...
- Codeforces Round #422 (Div. 2) C. Hacker, pack your bags!(更新数组)
传送门 题意 给出n个区间[l,r]及花费\(cost_i\),找两个区间满足 1.区间和为指定值x 2.花费最小 分析 先用vector记录(l,r,cost)和(r,l,cost),按l排序,再设 ...
- Educational Codeforces Round 21E selling souvenirs (dp)
传送门 题意 给出n个体积为wi,价值为ci的物品,现在有一个m大的背包 问如何装使得最后背包内的物品价值最大,输出价值 分析 一般的思路是01背包,但n*v不可做 题解的思路 We can iter ...
- hdu5443 【线段树】
题意: 略 思路: 暴力是可以的O(1e7),这里采用线段树,线段树区间查找O(logn) #include<stdio.h> #include<string.h> #incl ...
- python 字符串操作一
一.创建字符串 >>> s1 = '12345' >>> s1 '12345' >>> s2 = str(12345) >>> ...
- IT兄弟连 JavaWeb教程 经典案例3
案例需求:写一个用户登录的html页面有账号和密码,并在登录的Servlet中获取登录的账号和密码,如果账号是abc密码是123则重定向到main.html,否则重定向到login.html. 案例实 ...
- 大型系统的Redis性能优化
问题描述 系统背景:大型线上Java服务集群(活跃用户数上千万),业务重度使用Redis存储个管理Session,业务并发量>1WQPS,基本上每个请求都需要访问Redis(可能是多次),使用了 ...
- UVA - 1349 D - Optimal Bus Route Design
4. D - Optimal Bus Route Design 题意:给出n(n<=100)个点的带权有向图,找出若干个有向圈,每个点恰好属于一个有向圈.要求权和尽量小. 注意即使(u,v)和( ...
- RHEL 6.5----SCSI存储
主机名 IP master 192.168.30.130 node-1 192.168.30.131 node-2 192.168.30.132 安装并启动 [root@master ~]# ll / ...
- UGUI_屏幕适配
引用:http://www.xuanyusong.com/archives/3278#comments 1.可以选择的有三种: 1.Screen Space – overlay 此模式不需要UI摄像 ...