Chinaunix首页 | 论坛 | 博客
  • 博客访问: 31842
  • 博文数量: 10
  • 博客积分: 105
  • 博客等级: 民兵
  • 技术积分: 85
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-15 16:12
文章分类

全部博文(10)

文章存档

2012年(10)

我的朋友

分类: 数据库开发技术

2012-02-15 16:20:39

在TERADATA中使用not in来做过滤条件的时候需要谨慎。如果要过滤的字段C存在null值,而我们想要的结果不想把这个字段为null的记录过滤掉,条件我们就要写成(C is  null or c not in ('ss','dd'....)),在实际情况中我们经常漏掉C is  null导致我们的数据不全。例子如下:
 
先建立临时表和插入一些数据
 
  1. CREATE VOLATILE MULTISET TABLE A ,NO LOG
  2. (
  3. A VARCHAR(5)
  4. , B VARCHAR(5)
  5. )
  6. PRIMARY INDEX (A)
  7. ON COMMIT PRESERVE ROWS;
  8. CREATE VOLATILE MULTISET TABLE B ,NO LOG
  9. (
  10. B VARCHAR(5)
  11. , C VARCHAR(5)
  12. )
  13. PRIMARY INDEX (B)
  14. ON COMMIT PRESERVE ROWS;
  15. insert into A values('a1','b1');
  16. insert into A values('a2','b2');
  17. insert into A values('a3','b3');
  18. insert into A values('a4','b4');
  19. insert into B values('b3','c3');
  20. insert into B values('b4','c4');
  21. insert into B values('b5','c5');
  22. insert into B values('b6','c6');
现在做
  1. select * from A left join B on A.B= B.B
  2. where B.C is null or B.C not in ('c3')
  1. select * from A left join B on A.B= B.B
  2. where B.C not in ('c3')
自然会发现问题所在。
阅读(483) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:Page cache和buffer cache的区别与联系

给主人留下些什么吧!~~