此代码不工作,显示错误“from keyword not found where expected”
select m.marks,
CASE
WHEN m.marks<65 then 'F'
WHEN m.marks>65 then 'P'
END m.grade
from student s INNER JOIN marks m ON s.id=m.id;
但这是有效的
select marks,
CASE
WHEN marks<65 then 'F'
WHEN marks>65 then 'P'
END grade
from marks
3条答案
按热度按时间sy5wg1nm1#
这个
m
是的别名marks
表中的列时使用。将其应用于列别名:在它不属于的地方,所以-只在那个地方-移除
m.
:正如@gordon在评论中指出的,你检查的是>65和<65,因此一个正好65的学生不会得到f或p,他们的分数将为空。你可能想要:
或
... 尽管如果
marks
如果为null,则第二个版本也会将其视为f,而第一个版本仍将返回null。cedebl8k2#
不能将列值用作列别名
如果你使用
oracle希望在您的case块结束后有一个别名,但是您正在添加另一个列值(因为可以省略key)
2jcobegt3#
m.grade
是问题,应该是公正的grade
因为它是一个别名