多个 join 串联的问题! 奇怪

iscandy 2010-09-26 01:26:40
a (id1,id2)
b (id1)
c (id1,id2)



SELECT COUNT(*) FROM a

得到结果:1901


SELECT COUNT(*) FROM a LEFT OUTER JOIN b ON a.ID1 = b.ID1

得到结果:1901


SELECT COUNT(*) FROM a LEFT OUTER JOIN b ON a.ID1 = b.ID1 LEFT OUTER JOIN c ON a.ID2 = c.ID2

得到结果:2166


SELECT COUNT(*) FROM a LEFT OUTER JOIN b ON a.ID1 = b.ID1 LEFT OUTER JOIN c ON a.ID2 = c.ID2 and a.ID1=c.ID1

得到结果:1901


请问,为什么我连续用2个 LEFT JOIN,得到的结果反而比用1个LEFT JOIN 的结果多呢?

连续的LEFT JOIN,不是应该以最左边的表的条数为准的吗???



...全文
53 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
iscandy 2010-09-26
谢谢各位
回复
vivai2010 2010-09-26
[Quote=引用 2 楼 sqlcenter 的回复:]
c.id2肯定有重复
[/Quote]

同上
回复
幸运的意外 2010-09-26
C表的记录与A表,B表的记录在id1字段上等值连接时可能存在重复的数据,造成了记录变多,当将连接条件加强(就是a.ID2 = c.ID2 and a.ID1=c.ID1)后,结果就正确了。
回复
iscandy 2010-09-26
明白了,因为我 a 和 c 都是多主键的表,而我在join的时候,只提供了一个主键作为关联条件,产生了重复.

回复
SQLCenter 2010-09-26
c.id2肯定有重复
回复
SQLCenter 2010-09-26
--> a, c 至少有一个表的id2重复:

select count(id2), count(distinct id2) from a

select count(id2), count(distinct id2) from c
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2010-09-26 01:26
社区公告
暂无公告