例如:a表数据:
考试科目 考试成绩 考生 考试标题
01 02 001 期中考试
b表
类型id 状态id 名称
1 01 语文
1 02 数学
2 01 优秀
2 02 良好
3 001 小明
3 002 小红
c表
类型id 名称
1 考试科目
2 考试成绩
3 考生
查询结果要求: 考试科目 考试成绩 考生 考试标题
语文 良好 小明 期中考试
考试科目 考试成绩 考生 考试标题
01 02 001 期中考试
b表
类型id 状态id 名称
1 01 语文
1 02 数学
2 01 优秀
2 02 良好
3 001 小明
3 002 小红
c表
类型id 名称
1 考试科目
2 考试成绩
3 考生
查询结果要求: 考试科目 考试成绩 考生 考试标题
语文 良好 小明 期中考试
建这么3张表吧:
create table A(
calss_id varchar2(10),--考试科目
score varchar2(10),--考试成绩
stu_id varchar2(10),--考生
title varchar2(40) --考试标题
);
create table B(
type varchar2(10),--类型id
state varchar2(10),--状态id
state_name varchar2(10)--名称
);
create table C(
type varchar2(10),--类型id
type_name varchar2(10)--名称
);
注:实际查询的时候C表是多余的。sql语句为:select
t1.state_name class_name,t2.state_name score,t3.state_name student_name,t.title
from A t
left join B t1 on t1.type=1 and t.calss_id=t1.state
left join B t2 on t2.type=2 and t.score=t2.state
left join B t3 on t3.type=3 and t.stu_id=t3.state
order by class_name,score,student_name
(select b.名称 (select b.状态id status_b,b.名称 name_b,c.名称 name_c from from b,c
where b.类型id = c.类型id ) d where d.status_b=a.考试科目 and d.name_c='考试科目'),
(select b.名称 (select b.状态id status_b,b.名称 name_b,c.名称 name_c from from b,c
where b.类型id = c.类型id ) d where d.status_b=a.考试成绩 and d.name_c='考试成绩'),
(select b.名称 (select b.状态id status_b,b.名称 name_b,c.名称 name_c from from b,c
where b.类型id = c.类型id ) d where d.status_b=a.考生 and d.name_c='考生'),
考试标题
from a