请教SQL语句(MySQL和HQL)
比如有这样一组数据:一年级、二年级、三年级、四年级、初一、初二、初三、高一、高二、高三现在想实现的是。查询出结果,年级的排列次序按照小学、初中、高中排列。这里面的年级还有...
比如有这样一组数据:
一年级、二年级、三年级、四年级、初一、初二、初三、高一、高二、高三
现在想实现的是。查询出结果,年级的排列次序按照小学、初中、高中排列。这里面的年级还有重复的,需要去掉重复显示的年级。比如表叫做student 其中年级列名为 grade。实体为表名、列名大写。
求一条HQL或者是MySQL语句,哪位高手能帮小弟一把,感激不尽!
可能是我叙述有问题?
这些年级是需要从那个学生的表里查询出来的。因为显示的时候不是所有年级都显示。
比如说我是根据某个老师的关联来查询这个学生表的话。一个老师显然不能是教授所有年级,那么单单只是查出这个老师所教授的年级,并且按照上面说的排序的话。又要怎么弄呢?总不能老是新建表吧? 展开
一年级、二年级、三年级、四年级、初一、初二、初三、高一、高二、高三
现在想实现的是。查询出结果,年级的排列次序按照小学、初中、高中排列。这里面的年级还有重复的,需要去掉重复显示的年级。比如表叫做student 其中年级列名为 grade。实体为表名、列名大写。
求一条HQL或者是MySQL语句,哪位高手能帮小弟一把,感激不尽!
可能是我叙述有问题?
这些年级是需要从那个学生的表里查询出来的。因为显示的时候不是所有年级都显示。
比如说我是根据某个老师的关联来查询这个学生表的话。一个老师显然不能是教授所有年级,那么单单只是查出这个老师所教授的年级,并且按照上面说的排序的话。又要怎么弄呢?总不能老是新建表吧? 展开
3个回答
展开全部
办法是有的:
原来的表叫test11
再创建一个表(test12),把要排序的规则写进去:
ORDERINDEX Number
NAME Varchar2
ORDERINDEX表示序号,表示排在第几位
NAME 表示年级
insert all
into test12 values(1,'一年级')
into test12 values(2,'二年级')
into test12 values(3,'三年级')
into test12 values(4,'四年级')
into test12 values(5,'五年级')
into test12 values(6,'六年级')
into test12 values(7,'初一')
into test12 values(8,'初二')
into test12 values(9,'初三')
into test12 values(10,'高一')
into test12 values(11,'高二')
into test12 values(12,'高三')
select * from dual
然后查询“查询出结果,年级的排列次序按照小学、初中、高中排列”
select test12.name from test11 , test12
where test11.GRADE =test12.name
group by test12.name,test12.ORDERINDEX
order by test12.ORDERINDEX
当然,如果你“这里面的年级还有重复的,需要去掉重复显示的年级”的话
那么最后查询出来的结果就只有年级一个字段了,或者是和年级相关的字段了。
不知道我的解释是不是你要的。
你说的意思我理解了,我这个方法就算基本可行,你把所有可能出现的年级都建在一个表里,只要你查询这个东西,就和这个表关联就行了。你可以试验下,觉得不好再和我说。
你的排序规则只有一个,那就只需要建一个表了,在这个表里把所有排序规则都体现出来就行了,建这个表有问题?
原来的表叫test11
再创建一个表(test12),把要排序的规则写进去:
ORDERINDEX Number
NAME Varchar2
ORDERINDEX表示序号,表示排在第几位
NAME 表示年级
insert all
into test12 values(1,'一年级')
into test12 values(2,'二年级')
into test12 values(3,'三年级')
into test12 values(4,'四年级')
into test12 values(5,'五年级')
into test12 values(6,'六年级')
into test12 values(7,'初一')
into test12 values(8,'初二')
into test12 values(9,'初三')
into test12 values(10,'高一')
into test12 values(11,'高二')
into test12 values(12,'高三')
select * from dual
然后查询“查询出结果,年级的排列次序按照小学、初中、高中排列”
select test12.name from test11 , test12
where test11.GRADE =test12.name
group by test12.name,test12.ORDERINDEX
order by test12.ORDERINDEX
当然,如果你“这里面的年级还有重复的,需要去掉重复显示的年级”的话
那么最后查询出来的结果就只有年级一个字段了,或者是和年级相关的字段了。
不知道我的解释是不是你要的。
你说的意思我理解了,我这个方法就算基本可行,你把所有可能出现的年级都建在一个表里,只要你查询这个东西,就和这个表关联就行了。你可以试验下,觉得不好再和我说。
你的排序规则只有一个,那就只需要建一个表了,在这个表里把所有排序规则都体现出来就行了,建这个表有问题?
展开全部
如果你要固定的排序结果:
select a.grade from (
select 1 as id,"一年级" as grade union
select 2 as id,"二年级" as grade union
...
select 10 as id,"高三" as grade) a
order by a.id;
没有用上student表
如果需要通过grade关联其它表的话:
select * from
(select a.grade from (
select 1 as id,"一年级" as grade union
select 2 as id,"二年级" as grade union
...
select 10 as id,"高三" as grade) a
order by a.id) a left/inner/right join 表 on a.grade=表.字段
select a.grade from (
select 1 as id,"一年级" as grade union
select 2 as id,"二年级" as grade union
...
select 10 as id,"高三" as grade) a
order by a.id;
没有用上student表
如果需要通过grade关联其它表的话:
select * from
(select a.grade from (
select 1 as id,"一年级" as grade union
select 2 as id,"二年级" as grade union
...
select 10 as id,"高三" as grade) a
order by a.id) a left/inner/right join 表 on a.grade=表.字段
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
同意楼上的方法,顺便弄简单点
新建表grade 数据如下:
grade_id grade
1 一年级
2 二年级
依次类推
最终 mysql 语句
SELECT *
FROM `grade` , `student`
WHERE student.grade = grade.grade
GROUP BY student.grade
ORDER BY grade.grade_id asc
新建表grade 数据如下:
grade_id grade
1 一年级
2 二年级
依次类推
最终 mysql 语句
SELECT *
FROM `grade` , `student`
WHERE student.grade = grade.grade
GROUP BY student.grade
ORDER BY grade.grade_id asc
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询