Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用join in语句时,在select语句中使用Case表达式时出错_Sql_Oracle_Case_Column Alias - Fatal编程技术网

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;