【DB2】NOT IN使用中的大坑
1.环境准备
- ------建表TB
- DROP TABLE TB;
- CREATE TABLE TB
- (
- ID INTEGER,
- LEVEL_DETAIL VARCHAR (100)
- );
- INSERT INTO TB (ID, LEVEL_DETAIL)
- VALUES (1, 'A');
- INSERT INTO TB (ID, LEVEL_DETAIL)
- VALUES (NULL, 'A');
- INSERT INTO TB (ID, LEVEL_DETAIL)
- VALUES (2, 'B');
- INSERT INTO TB (ID, LEVEL_DETAIL)
- VALUES (1, 'A++');
- INSERT INTO TB (ID, LEVEL_DETAIL)
- VALUES (1, 'A--');
- ----建表TB_TEMP
- DROP TABLE TB_TEMP;
- CREATE TABLE TB_TEMP
- (
- ID INTEGER,
- LEVEL_DETAIL VARCHAR (100)
- );
- INSERT INTO TB_TEMP (ID, LEVEL_DETAIL)
- VALUES (1, 'A');
- INSERT INTO TB_TEMP (ID, LEVEL_DETAIL)
- VALUES (2, 'B');
- INSERT INTO TB_TEMP (ID, LEVEL_DETAIL)
- VALUES (1, 'A++');
- INSERT INTO TB_TEMP (ID, LEVEL_DETAIL)
- VALUES (1, 'A--');
- INSERT INTO TB_TEMP (ID, LEVEL_DETAIL)
- VALUES (3, 'CCC');
- INSERT INTO TB_TEMP (ID, LEVEL_DETAIL)
- VALUES (4, 'CCC');
- INSERT INTO TB_TEMP (ID, LEVEL_DETAIL)
- VALUES (4, 'C');
- INSERT INTO TB_TEMP (ID, LEVEL_DETAIL)
- VALUES (5, 'AA');
数据展示:
TB表
TB_TEMP表
---使用IN
SELECT * FROM TB_TEMP WHERE ID IN (SELECT ID FROM TB GROUP BY ID)
--EXISTS
SELECT * FROM TB_TEMP A WHERE EXISTS (SELECT 1 FROM TB B WHERE A.ID=B.ID)
--NOT IN (跟预期结果不一致)
SELECT * FROM TB_TEMP WHERE ID NOT IN (SELECT ID FROM TB GROUP BY ID)
预期结果:
ID | LEVEL_DETAIL |
3 | CCC |
4 | CCC |
4 | C |
5 | AA |
实际结果:
--NOT EXISTS(没问题)
SELECT * FROM TB_TEMP A WHERE NOT EXISTS (SELECT 1 FROM TB B WHERE A.ID=B.ID)
在使用过程中,尽量不要使用NOT IN ,当列中出现了NULL值,那么将会无结果返回(NULL不是具体的值,做二元运算符时,计算结果也为NULL)
【DB2】NOT IN使用中的大坑的更多相关文章
- Android 推送集成华为,小米,友盟
公司的 app 一直使用的是极光推送,最近反馈比较多的是推送消息收不到,看来需要找新的推送服务了,在国内目前手机品牌占有率比较多的是华为和小米,且这两家都有自己的推送服务,同时一个合作的友商说他们使用 ...
- DB2创建数据库常用参数详解
转自http://czmmiao.iteye.com/blog/1335801 DB2创建数据库常用参数详解 本文只介绍DB2 create database语法中的常用参数http://publib ...
- 【DB2】慎用nickname,可能会引起效率较低
在使用db2的时候,在A库建立了nickname,指向B库的物理表(数据量800多万),现在使用程序(JDBC)连接数据库,并计算指标,但是发现效率很低. 解决办法: 删除A库中的nickname,在 ...
- DB2事务日志
1.DB2数据库的日志原理 事务日志记录数据库中所有对象和数据的改变,在早前版本中最大可达256G,其大小为( logprimary + logsecond ) * logfilsiz,其中logpr ...
- DB2与oracle类型对比
本文摘自http://www.cnblogs.com/cy163/archive/2010/11/17/1880280.html 做过DB2数据库应用迁移的工程师,了解IBM MTK工具在迁移过程中所 ...
- Docker的大坑小洼(二)
再谈<Docker的大坑小洼> 今天闲暇看了一下宏亮同学写的一篇<Docker的大坑小洼>,非常受启发.因为Docker的文章真的很多了,但大家如果只是玩一玩,有很多坑是不会碰 ...
- DB2重启数据库实例
DB2重启数据库实例时,有时停止实例会失败,此时需要先确认没有应用链接数据库,然后再关闭数据库实例,并重新启动. 1.查看是否有活动的链接 命令:db2 list applications for d ...
- 你搞懂 ORACLE、 SQLSERVER、MYSQL与DB2的区别了吗
ORACLE. SQLSERVER.MYSQL与DB2的区别--平台性: Oracle.MYSQL与DB2可在所有主流平台上运行: SQL Server只能在Windows下运行: --安 ...
- ORA-02020 : 过多的数据库链接在使用中-Windows环境解决步骤
一.现象 编译存储过程时报ORA-02020错误. 错误详细信息:ORA-04052在查找远程对象 xx@yy时出错 ORA-00604 : 递归 SQL 级别 1 出现错误 ORA-02020 : ...
随机推荐
- 第一步:Java开发环境的配置
一.下载JDK 下载地址:www.oracle.com.如下图: 二.配置JDK 安装JDK一直点击下一步就可以,默认是安装在C盘里.如下图: 然后配置系统路径(主要目的是方便开发),参考地址:jin ...
- Jquery EasyUI选项卡-Tabs的使用方法
以下是easyUI的tabs的简单实用介绍. var e =$('#main').tabs('exists','accordion'); if(e==true){ $('#main').tabs(' ...
- Codeforces 1036E. Covered Points
又一次写起了几何.... 特殊处理在于有可能出现多条线段交于一点的情况,每次考虑时,对每条线段与其他所有线段的交点存在一个set里,对每一个set,每次删除set.size()即可 重点在于判断两条线 ...
- POJ 1741 Tree (点分治)
Tree Time Limit: 1000MS Memory ...
- c++基础学习之string
//学习使用string类 2013-10-18 lingc #include <iostream> #include <string>//include this head ...
- [Atcoder Regular Contest 060] Tutorial
Link: ARC060 传送门 C: 由于难以维护和更新平均数的值: $Average->Sum/Num$ 这样我们只要用$dp[i][j][sum]$维护前$i$个数中取$j$个,且和为$s ...
- ZOJ 3949 Edge to the Root(树形DP)
[题目链接] http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3949 [题目大意] 给出一棵根为1的树,每条边边长为1,请你 ...
- 【bzoj1604】【[Usaco2008 Open]Cow Neighborhoods】简单的谈谈曼哈顿距离
(最近p站上不去要死了) Description 了解奶牛们的人都知道,奶牛喜欢成群结队.观察约翰的N(1≤N≤100000)只奶牛,你会发现她们已经结成了几个"群".每只奶牛在吃 ...
- 关于SQL优化方面的一些总结
在sql查询中为了提高查询效率,我们常常会采取一些措施对查询语句进行sql优化,下面总结的一些方法,有需要的可以参考参考. 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 ord ...
- sql获取汉字的拼音首字母的函数
ql获取汉字的拼音首字母 if exists (select * from sysobjects where id = object_id(N'[fn_ChineseToSpell]') and ...