SQL Server的连接查询???
SELECT COUNT(*)
FROM a , b
where a.NO = b.NO
and a.NO in (
SELECT NO
FROM c )
-----------------------------------------
SELECT COUNT(*)
FROM a , b ,c
where a.NO = b.NO
and a.NO = c.NO
-------------------------------------------
以上两个sql,我认为执行结果应该是一样的,即选出的count值,应该相等,可是为什么我在实际环境中执行等到不同的结果,第二个sql选出的件数要多一些,这是为什么?
环境sqlServer2000
我记得这样的写法,再oracle中会选到一样的结果!为什么在sqlServer中会这样?
问题点数:100、回复次数:7Top
1 楼libin_ftsafe(子陌红尘:TS for Banking Card)回复于 2005-06-21 14:34:35 得分 50
导致这种问题的原因在于表C中的NO存在重复的值
SELECT
COUNT(*)
FROM
a ,b
where
a.NO = b.NO
and
a.NO in (SELECT NO FROM c)
与楼下的查询结果应该是一致的
SELECT
COUNT(*)
FROM
a , b ,(select distinct NO from c) d
where
a.NO = b.NO
and
a.NO = d.NOTop
2 楼venket(创业先锋)回复于 2005-06-21 14:36:13 得分 10
那个是数据库里面特有的连接机制啊!Top
3 楼paoluo(一天到晚游泳的鱼)回复于 2005-06-21 14:37:19 得分 10
如果C表中一个NO会有多条记录的话,第二条语句得出来的count值的确要多些。
Top
4 楼pbsql(风云)回复于 2005-06-21 14:37:53 得分 10
以上两个sql,如果NO在c表中唯一,那么执行结果应该是一样的,如果不唯一则不等,举例:
a中数据:
1
2
b中数据:
2
3
c中数据:
2
2
3
前者返回1,后者返回2Top
5 楼paoluo(一天到晚游泳的鱼)回复于 2005-06-21 14:38:41 得分 10
--建立测试环境
Create Table A(NO Int,Name Varchar(10))
Create Table B(NO Int,Address Varchar(10))
Create Table C(NO Int,Remark Varchar(10))
Insert A Values(1,'AA')
Insert A Values(2,'BB')
Insert A Values(3,'CC')
Insert B Values(1,'ShangHai')
Insert B Values(2,'ShangHai')
Insert B Values(3,'ShangHai')
Insert C Values(1,'KK')
Insert C Values(1,'KKKK')
Insert C Values(2,'TTT')
GO
--测试
SELECT COUNT(*)
FROM a , b
where a.NO = b.NO
and a.NO in (
SELECT NO
FROM c )
SELECT COUNT(*)
FROM a , b ,c
where a.NO = b.NO
and a.NO = c.NO
--删除测试环境
Drop Table A,B,C
--结果
/*
2
3
*/Top
6 楼hsj20041004(光芒)回复于 2005-06-21 14:43:23 得分 10
-------------------------------
看看表中是否存在重复记录
select no,count(*) from a group by no
select no,count(*) from c group by noTop
7 楼lanlansky(EjbPro)回复于 2005-06-21 14:47:48 得分 0
多些各位
顺便问一下,那个写法效率高一点?Top




