我不知道为什么会有错误。也许是因为NULL?这两个查询都单独工作,但在联合时失败:
select A.id,A.Name, B.Grade from Students A, Grades B
where A.Marks>=B.min_mark and A.marks<=B.max_mark and B.grade>=8
order by B.grade desc,A.name
union
select A.id,null, B.Grade from Students A, Grades B
where A.Marks>=B.min_mark and A.marks<=B.max_mark and B.grade<8
order by B.grade asc,A.name错误1064 (42000)在第1行:您的SQL语法出现了错误;请检查与MySQL服务器版本对应的手册,以获得使用接近“union”的正确语法。
最初的指定是
Ketty给了Eve一个任务来生成一个包含三个列的报告:名称、等级和标记。凯蒂不想知道那些成绩低于8年级的学生的名字。报告必须按等级递减--即先输入更高的分数。如果有一个以上的学生有相同的年级(8-10)分配给他们,按字母顺序排序这些特定的学生。最后,如果分数低于8,使用"NULL“作为它们的名称,并按其等级降序列出它们。如果有一个以上的学生有相同的年级(1-7)分配给他们,按他们的分数按升序排序。
除了union,还有别的办法吗?
发布于 2022-06-13 06:33:27
正如MySQL手册中所述,在使用union语句中使用ORDER和place子句时,要对单个SELECT应用ORDER或place子句,将SELECT插入括号并将该子句放在括号内。试试这个:
(select A.id,A.Name, B.Grade from Students A, Grades B where A.Marks>=B.min_mark and A.marks<=B.max_mark and B.grade>=8 order by B.grade desc,A.name)
union
(select A.id,null, B.Grade from Students A, Grades B where A.Marks>=B.min_mark and A.marks<=B.max_mark and B.grade<8 order by B.grade asc,A.name);此外,只有联合中的最后一个查询的顺序生效。
https://stackoverflow.com/questions/72598464
复制相似问题