多个 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,不是应该以最左边的表的条数为准的吗???



...全文
80 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
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

22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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