大力、邹建,我没有多少分了,麻烦你们帮我看看这个问题!

cqnucsmoon 2003-11-21 09:05:45
http://expert.csdn.net/Expert/topic/2473/2473792.xml?temp=.9331476
...全文
31 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
eru 2003-11-21
  • 打赏
  • 举报
回复
还可以这样写
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

试试看效率怎么样?
eru 2003-11-21
  • 打赏
  • 举报
回复
那你第二条写错了,
SELECT * FROM 表1 WHERE NOT EXISTS
(SELECT * FROM 表2 WHERE 表1.YXDM=表2.YXDM AND 表1.ZYDM=表2.ZYDM and 表1.YJFXM=表2.YJFXM)
cqnucsmoon 2003-11-21
  • 打赏
  • 举报
回复
大力,我说简单点,比如
表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中第二条和第三条记录都找出来,我觉得两种语句都应该一样的啊?怎么回事,我短路了?????

pengdali 2003-11-21
  • 打赏
  • 举报
回复
表1
aa bb
----------
a1 b1
a2 b2


表2
---------
a1 b1
a1 b2
a2 b2

你选择表2希望得到
a1 b1
a2 b2
你用你的第一个是错的,会返回所有记录
a1 b1
a1 b2
a2 b2
pengdali 2003-11-21
  • 打赏
  • 举报
回复
你第1个写错了

SELECT * FROM 表1 WHERE NOT EXISTS
(SELECT 1 FROM 表2 WHERE 表1.YXDM=表2.YXDM AND 表1.ZYDM=表2.ZYDM)

是最好的!!!也是对的。
cqnucsmoon 2003-11-21
  • 打赏
  • 举报
回复
是我写错了,不好意思!!!

因为我想根据另外一个表来检验这个表里的字段的值是不是合法的,所以用了两种方法:
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秒左右!
请大家解释解释.
txlicenhe 2003-11-21
  • 打赏
  • 举报
回复
真没看到你的代码在哪里啊?
not in 有了,exists呢?
当然, exists 一般会比not in 快。
zjcxc 元老 2003-11-21
  • 打赏
  • 举报
回复
估计是你的YJFXM中有NULL值.
pengdali 2003-11-21
  • 打赏
  • 举报
回复
你的语句到底是什么样的?exists在那?
cqnucsmoon 2003-11-21
  • 打赏
  • 举报
回复

明白了我
是不是当用EXISTS的时候要比IN要多一个条件,现在我加了一个条件后,两者查询结果都一样了!

34,668

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧