• 全部
  • 基础类
  • 应用实例
  • 新技术前沿

join on的条件问题

xyq1986 2008-04-08 05:39:51
select distinct * from t_User
left join t_UserInRole
on t_User.UserId=t_UserInRole.UserId
and t_User.UserId<10
这样写为什么连UserId>=10的也显示出来,
我知道可以用where,但我想知道一下写在on后面和写在where里的区别。
...全文
160 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
JL99000 2008-04-08
首先,left join 的执行是有顺序的
他先用左边的第一条记录来右边的进行比较,找出符合条件的(如果没有符合条件的,则用左边的作为查询结果的左半部分,右边用空null来填充),依次执行左边的每一条记录,直到最后一条用,将所有结果拼在一起

注意:左连接结果的行数最少为左表的行数

其次,在加如了where条件后,where不是连接查询语句的一部分,他是在做完连接查询以后在做的过滤,因此他可以将做完左外连接的数据再过滤

回复
xiaomeixiang 2008-04-08
翻了个以前的老贴,看了应该就能明白 JOIN 和 WHERE 是怎么执行的:

http://topic.csdn.net/t/20060922/21/5042110.html
回复
zccmy22 2008-04-08
用 LEFT JOIN 运算 创建左边外部联接.左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。

用RIGHT JOIN 运算 创建 右边外部联接.右边外部联接将包含了从第二个(右边)开始的两个表中的全部记录,即使在第一个(左边)表中并没有匹配值的记录。

例如,可以使用 LEFT JOIN 与部门(左边)及员工(右边)表来选择所有的部门,包含了没有分配到员工的部门。可以使用 RIGHT JOIN 选择所有的员工,包含了没有分配到部门的员工。

下列示例显示
所以加了条件应没有用。呵呵。
回复
xiaomeixiang 2008-04-08
where对连接完成的表进行过滤,join只针对符合on后面条件的记录进行连接
回复
zccmy22 2008-04-08
weher t_User.UserId <10 就可以了,
回复
liangCK 2008-04-08
inner join没有区别
outer join就有区别.
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-04-08 05:39
社区公告
暂无公告