SQL JOIN 对应多个ON的顺序问题 20

有三张表学生表,课程表,成绩表,其中,学生表和成绩表可以通过学号连接,课程表可以和成绩表通过课程号连接,使用JOIN和ON语句,如下SELECT姓名,课程名,分数FROM... 有三张表学生表,课程表,成绩表,其中,学生表和成绩表可以通过学号连接,课程表可以和成绩表通过课程号连接,使用JOIN和ON语句,如下
SELECT 姓名,课程名,分数
FROM 学生表JOIN 课程表JOIN 成绩表
ON 课程表.课程号=成绩表.课程号
ON 学生表.学号=成绩表.学号
这个SQL语句在SQLServer2005下可以运行,但是如果把三张表的JOIN顺序调换一下,就不能实行,系统报错说某个字段不能绑定,比如,写成以下形式:
SELECT 姓名,课程名,分数
FROM 课程表 JOIN 学生表 JOIN 成绩表
ON 课程表.课程号=成绩表.课程号
ON 学生表.学号=成绩表.学号
就报错:消息 4104,级别 16,状态 1,第 1 行
无法绑定由多个部分组成的标识符 "课程表.课程号"。
另外,如果不改动JOIN的顺序,但是交换ON的顺序,也就是写成以下形式:
SELECT 姓名,课程名,分数
FROM 学生表 JOIN 课程表 JOIN 成绩表
ON 学生表.学号=成绩表.学号
ON 课程表.课程号=成绩表.课程号
也会报错:消息 4104,级别 16,状态 1,第 1 行
无法绑定由多个部分组成的标识符 "学生表.学号"

请问是什么原因,我了解到这个顺序是必要的,但是什么样的顺序却不知道,请高人指点,谢谢
这个问题是教科书上的例子,但是这本书只用了这种一次写一大堆的ON的写法,然后后面跟了一个说明,说这些ON的顺序很重要,但是又不说明这顺序是按什么原则排列的,我是老师,讲课的时候要讲这个例子,所以希望知道这个顺序是什么,谢谢各位的指点*^_^*
谢谢各位的指点,不过我要申明的是:我知道正确的写法,但是我要在讲课的时候说明这个ON的顺序,也就是说,我的写法必须是把JOIN和ON分开写,而不是JOIN和ON配合在一起写,我查了很多资料都没有说明这个顺序,请各位指点,谢谢
展开
 我来答
ma5276258
2008-04-24 · TA获得超过356个赞
知道小有建树答主
回答量:171
采纳率:0%
帮助的人:122万
展开全部
SELECT 姓名,课程名,分数
FROM 学生表 JOIN 成绩表
ON 学生表.学号=成绩表.学号
JOIN 课程表
ON 课程表.课程号=成绩表.课程号

一个 join跟一个 on 这样比较清楚。。。
你的写一堆。。然后跟一堆 on
太麻烦。。而且非常容易出错。。表多了估计得 疯了。还得按顺序

偷懒的办法就是用 ,
SELECT 姓名,课程名,分数
FROM 课程表,学生表,成绩表
where 课程表.课程号=成绩表.课程号
and 学生表.学号=成绩表.学号
ewolfe
2008-04-25 · TA获得超过246个赞
知道答主
回答量:21
采纳率:0%
帮助的人:22.9万
展开全部
的确,据说现在比较流行的写法是用join on,但教程上一般写在where.

但楼主的写法应该说比较混乱,写的像ma5276258这种样式更清晰一些.
SELECT 姓名,课程名,分数
FROM 学生表 JOIN 成绩表
ON 学生表.学号=成绩表.学号
JOIN 课程表
ON 课程表.课程号=成绩表.课程号

到于原因,我猜,,,嘿没研究过。就从上面ma5276258这种写法来看:
先是"学生表" join 成绩表 通过-学生表.学号=成绩表.学号
然后再 join 课程表 通过-课程表.课程号=成绩表.课程号

我们再来看你出错的第一个写法:
先是 课程表 JOIN 学生表
但并没有join的字段........后边就不说了。

我想可能是这个原因(前提是两个表,或多表的连接顺序是像我猜的这样)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式