你的语句到底是什么样的?exists在那?
解决方案 »
- 发了一个"西门子手机(相当串口模块)实时收发短信的程序 "需求,欢迎大家参与
- 存储的问题啊 ??
- 高难度时间计算问题
- sql的union使用问题
- SQL SERVER 2005生成的脚本,如何用来在SQL Server2000中建立数据库?
- 关于SQL MOBILE部署的问题
- sql导出excel格式
- 各位在调试存储过程的时候...........
- 如何解密2005数据库的存储过程
- ora8.05列出某用户下所有表的表名、类型、字节数、EXTENTS、记录数,如何写?谢谢!
- 我只有3分了,但为什么NOT IN 和 NOT EXISTS查询出来的结果不一样呢??????
- TO:邹键,想问您为什么需要先删除这个存储过程?
not in 有了,exists呢?
当然, exists 一般会比not in 快。
1 SELECT * FROM 表1 WHERE YJFXM NOT IN
(SELECT DISTINCT YJFXM FROM 表2 WHERE 表1.YXDM=表2.YXDM AND 表1.ZYDM=表2.ZYDM)2第二种语句:
SELECT * FROM 表1 WHERE NOT EXISTS
(SELECT * FROM 表2 WHERE 表1.YXDM=表2.YXDM AND 表1.ZYDM=表2.ZYDM)执行过后,有两个问题:1。用IN的那句检查出来的结果要多些(注意:YJFXK内无任何空值及重复的记录值)2。并且当我在400多万记录下测试,EXISTS比IN 只快15秒左右!
请大家解释解释.
(SELECT 1 FROM 表2 WHERE 表1.YXDM=表2.YXDM AND 表1.ZYDM=表2.ZYDM)是最好的!!!也是对的。
aa bb
----------
a1 b1
a2 b2
表2
---------
a1 b1
a1 b2
a2 b2你选择表2希望得到
a1 b1
a2 b2
你用你的第一个是错的,会返回所有记录
a1 b1
a1 b2
a2 b2
表1
YXDM ZYDM YJFXM
A B C
A B D
A B E表2
YXDM ZYDM YJFXM
A B A
A B B
A B C因为在表2内没有YXDM=A,ZYDM=B ,且(YJFXM=D或YJFXM=E)的记录
所以应该把表1中第二条和第三条记录都找出来,我觉得两种语句都应该一样的啊?怎么回事,我短路了?????
SELECT * FROM 表1 WHERE NOT EXISTS
(SELECT * FROM 表2 WHERE 表1.YXDM=表2.YXDM AND 表1.ZYDM=表2.ZYDM and 表1.YJFXM=表2.YJFXM)
SELECT a.* FROM 表1 a left outer join 表2 b
on(a.YXDM=b.YXDM AND a.ZYDM=b.ZYDM and a.YJFXM=b.YJFXM)
WHERE b.YJFXM is null试试看效率怎么样?
明白了我
是不是当用EXISTS的时候要比IN要多一个条件,现在我加了一个条件后,两者查询结果都一样了!