您的位置:首页 > 职场人生

刷数据库面试试题时出现的错误和解决方法(一)

2018-02-02 21:46 267 查看
题目:把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩:

环境:编辑工具:sqlyog  数据库:mysql

描述:此题的三个表:

course表(课程表)

sc表(成绩表)


teacher表(教师表)


开始的sql语句
UPDATE sc
SET score = (SELECT
AVG(sc_1.score)
FROM sc sc_1
WHERE c.Cnum = sc_1.Cnum)
WHERE Cnum IN(SELECT
course.Cnum
FROM course,
teacher
WHERE teacher.Tname = '叶平'
AND teacher.Tnum = course.Tnum);
出现错误:You can't specify target table 'sc' for update in FROM clause,意思就是在同一个语句中你不能先查询出sc表的某些值,再更新sc表,那么久迂回一下吧,创建一个子句,在子句中查询吧:
UPDATE sc
SET score = (SELECT
a.avgScore
FROM (SELECT
AVG(sc_1.score)    avgScore
FROM sc sc_1
WHERE c.Cnum = sc_1.Cnum) a)
WHERE Cnum IN(SELECT
course.Cnum
FROM course,
teacher
WHERE teacher.Tname = '叶平'
AND teacher.Tnum = course.Tnum);
(这个问题只有在mysql中会出现)然后问题又来了:Unknown column 'sc.Cnum' in 'where clause'

sc.Cnum未知?不会吧,可能是这个查询语句套了很多层的缘故吧,思考了很久,换了很多方法:
UPDATE sc
SET score = (SELECT
a.avgScore
FROM (SELECT
AVG(sc_1.score)    avgScore
FROM sc sc_1,(SELECT * FROM sc )c
WHERE c.Cnum = sc_1.Cnum) a)
WHERE Cnum IN(SELECT
course.Cnum
FROM course,
teacher
WHERE teacher.Tname = '叶平'
AND teacher.Tnum = course.Tnum);
既然找不到sc表,那我就在前面把你这个表加上就好了。修改成功!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐