注册 登录
编程论坛 SQL Server论坛

join连接的顺序问题

josephzzq 发布于 2007-03-25 23:33, 1073 次点击

请问一下
select xs.学号,姓名,kc.课程号,成绩 from xs join xs_kc join kc on xs.学号=xs_kc.学号
on kc.课程号=xs_kc.课程号
where kc.课程名='计算机基础'and 成绩>79


select xs.学号,姓名,kc.课程号,成绩 from xs join xs_kc join kc on xs_kc.课程号=kc.课程号
on xs.学号=xs_kc.学号
where kc.课程名='计算机基础'and 成绩>79

为什么第一句运行出现错误,而第二句就可以呢

6 回复
#2
xiyou4192007-03-26 04:27
on和join匹配是按照括号的匹配原则的,即由内到外
你第一个例子中的第一个on和第二个join匹配,相当于"xs_kc join kc on xs.学号=xs_kc.学号"
当然会出错了~~~~~~~~~~~~~~~
#3
cyyu_ryh2007-03-26 09:30
楼上的说得对,多表连接需要注意匹配关系,下面有个多表连接的参考:
SELECT Max(dbo.RoleModule.RightCode)
FROM dbo.UserInfo INNER JOIN
dbo.RoleUser ON dbo.UserInfo.UserID = dbo.RoleUser.UserID INNER JOIN
dbo.RoleInfo ON dbo.RoleUser.RoleID = dbo.RoleInfo.RoleID INNER JOIN
dbo.RoleModule ON dbo.RoleInfo.RoleID = dbo.RoleModule.RoleID INNER JOIN
dbo.ModuleInfo ON
dbo.RoleModule.ModuleID = dbo.ModuleInfo.ModuleID
WHERE dbo.UserInfo.UserID = @UserID AND dbo.ModuleInfo.ModuleID = @ModuleID
#4
冰封情愁2007-03-26 10:42

请问2楼
第二个join连接的两个表是xs_kc 和kc.
那么第一个join连接的两个表是哪两个?是xs和xs_kc吗?

#5
Kendy1234562007-03-26 11:17
join join on on 是非常不好的写法
参看3楼的模式 每个join 后面接on
#6
初学Delphi2007-03-26 13:22

以前不习惯这种写法
学习了~。。

#7
josephzzq2007-03-26 14:31

呵呵,原来是这样~~~学习了
谢谢高手们

1