Sql 使用join in语句时,在select语句中使用Case表达式时出错
此代码不工作,并显示错误“未在预期位置找到来自关键字”Sql 使用join in语句时,在select语句中使用Case表达式时出错,sql,oracle,case,column-alias,Sql,Oracle,Case,Column Alias,此代码不工作,并显示错误“未在预期位置找到来自关键字” 选择m.marks, 案例 当m.marks65时,则为“P” 完m年级 来自学生s.id上的内部连接标记m=m.id; 但这是有效的 select marks, CASE WHEN marks<65 then 'F' WHEN marks>65 then 'P' END grade from marks 选择标记, 案例 当标记为65时,则为“P” 末级 从马克 m是标记表的别名,在引用该表中的列时使用该别名。您
选择m.marks,
案例
当m.marks65时,则为“P”
完m年级
来自学生s.id上的内部连接标记m=m.id;
但这是有效的
select marks,
CASE
WHEN marks<65 then 'F'
WHEN marks>65 then 'P'
END grade
from marks
选择标记,
案例
当标记为65时,则为“P”
末级
从马克
m是标记表的别名,在引用该表中的列时使用该别名。您正在将其应用于列别名:
END m.grade
在不属于的位置,因此-仅在该位置-删除m.
:
select m.marks,
CASE
WHEN m.marks<65 then 'F'
WHEN m.marks>65 then 'P'
END grade
from student s INNER JOIN marks m ON s.id=m.id;
。。。虽然如果标记
为null,第二个版本也会将其视为F,而第一个版本仍将返回null。不能将列值用作列别名
Select 1 AS Alias_1,
CASE
WHEN 1=1 THEN 1
WHEN 2=2 THEN 2
END AS Alias_2_AnyName
from dual d;
如果你使用
Select 1 AS Alias_1,
CASE
WHEN 1=1 THEN 1
WHEN 2=2 THEN 2
END AS d.value
from dual d;
Oracle希望在您的案例块结束后有一个别名,但您正在添加另一个列值(因为可以省略键)m.grade
是问题所在,它应该是grade
,因为它是一个别名
select m.marks,
CASE
WHEN m.marks<65 then 'F'
WHEN m.marks>65 then 'P'
END grade
from student s INNER JOIN marks m ON s.id=m.id;
选择m.marks,
案例
当m.marks65时,则为“P”
末级
来自学生s.id上的内部连接标记m=m.id;
谁是65岁马克炼狱中的人物。谢谢,我知道了,这是一个专栏别名。所以它不应该包含表别名。。。感谢you@saikumar-我添加了一条关于Gordon在评论中提到的65分缺失分数的注释。嘿,tq。。我明白了
Select 1 AS Alias_1,
CASE
WHEN 1=1 THEN 1
WHEN 2=2 THEN 2
END AS Alias_2_AnyName
from dual d;
Select 1 AS Alias_1,
CASE
WHEN 1=1 THEN 1
WHEN 2=2 THEN 2
END AS d.value
from dual d;
select m.marks,
CASE
WHEN m.marks<65 then 'F'
WHEN m.marks>65 then 'P'
END grade
from student s INNER JOIN marks m ON s.id=m.id;