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 ...
随机推荐
- Redis高级
Redis高级 redis数据备份与恢复 Redis SAVE 命令用于创建当前数据库的备份. redis Save 命令基本语法如下: redis 127.0.0.1:6379> SAVE 实 ...
- E20180423-hm
disclosure n. (发明等的) 公开; 泄露,揭露; 开诚布公的话; 被公开的事情,被披露的秘闻; alignment n. 结盟; 队列,排成直线; 校直,调整; [工] 准线; ali ...
- Mac下怎么运行python3的py文件
我的Mac现在是10.14.6系统,默认自带的python版本是2.7.(怎么查看版本?打开终端,输入python即可看到版本号) 由于现在需要运行python3写的py文件,需要将自带的python ...
- 浅谈欧拉函数 By cellur925
1.某神犇Blog 学了三遍的 欧拉函数φ--DEADFISH7 2.我要做一些补充o(* ̄▽ ̄*)o $φ(1)=1$: 公式有两种形式,一种有太多除法,实际可能会慢些.通用 对于任意$n$> ...
- python 蓝牙模块pybluz安装
最近项目运用了蓝牙,所以来学一学蓝牙. 经过查阅,知道python的蓝牙模块是pybluz,然后老管理进行安装 出错,提示“Could not find the Windows Platform SD ...
- js和jquery给iframe src赋值的3种方法
js和jquery给iframe src赋值的3种方法 网页使用iframe嵌入网页时,有时候需要动态处理src的值,而不是写死的,所以我们需要知道如何给iframe src赋值,通常是使用js或 ...
- hdu1863 畅通工程 基础最小生成树
#include <iostream> #include <cstdio> #include <algorithm> #define N 110 #define M ...
- Tomcat | 修改默认端口
Tomcat安装目录下 conf 目录下 server.xml 找到 <Connector connectionTimeout="/> 修改其中port值即可
- Caffe实战一(环境准备及CPU模式下编译)
经过前几天的折腾,终于把Ubuntu16.04开发环境给搭建了起来,包括win10+Ubuntu双系统的安装.系统安装后的优化等等. 详见之前的文章:Ubuntu16.04.2 LTS 64bit系统 ...
- Hdu 5442 Favorite Donut (2015 ACM/ICPC Asia Regional Changchun Online 最大最小表示法 + KMP)
题目链接: Hdu 5442 Favorite Donut 题目描述: 给出一个文本串,找出顺时针或者逆时针循环旋转后,字典序最大的那个字符串,字典序最大的字符串如果有多个,就输出下标最小的那个,如果 ...