请教一个SQL查询语句写法。。

hongzm 2011-05-22 12:11:21
请教一个SQL查询语句写法。。

BANJI 表为班级 字段:ID , NIANJI_ID(年级ID) , NAME
NIANJI 表为年级 字段:ID , XUEXIAO_ID(学校ID) , NAME
XUEXIAO 表为学校 字段: ID , NAME

STU表为学生总表 字段 :ID , LZ_TYPE(有三个值的可能BNAJI_ID,NIANJI_ID,XUEXIAO_ID) , LZ_ID(与LZ_TYPE对应,填写年级ID,学校ID或地区ID的值) , NAME

现希望查询所有学生表及其地区
即D.* , XUEXIAO.ID

不知道我表达清楚没有,希望高手指点。
...全文
98 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hongzm 2011-06-05
  • 打赏
  • 举报
回复
谢谢大家,给分Q!!!
秋雨飘落 2011-05-22
  • 打赏
  • 举报
回复
看我空间,加我Q
tangren 2011-05-22
  • 打赏
  • 举报
回复
SQL> SELECT * FROM xuexiao;

ID NAME
---------- ----------
1 一中
2 二中

SQL> SELECT * FROM nianji;

ID XUEXIAO_ID NAME
---------- ---------- ----------
11 1 一中一年级
12 1 一中二年级
21 2 二中一年级
22 2 二中二年级

SQL> SELECT * FROM banji;

ID NIANJI_ID NAME
---------- ---------- ----------
111 11 1中1年1班
112 11 1中1年2班
121 12 1中2年1班
122 12 1中2年2班
211 21 2中1年1班
212 21 2中1年2班
221 22 2中2年1班
222 22 2中2年2班

已选择8行。

SQL> SELECT s.*, x.name
2 FROM stu s, xuexiao x
3 WHERE s.lz_type = 'XUEXIAO_ID'
4 AND s.lz_id = x.id
5 UNION ALL
6 SELECT s.*, x.name
7 FROM stu s, xuexiao x, nianji n
8 WHERE s.lz_type = 'NIANJI_ID'
9 AND s.lz_id = n.id
10 AND n.xuexiao_id = x.id
11 UNION ALL
12 SELECT s.*, x.name
13 FROM stu s, xuexiao x, nianji n, banji b
14 WHERE s.lz_type = 'BANJI_ID'
15 AND s.lz_id = b.id
16 AND b.nianji_id = n.id
17 AND n.xuexiao_id = x.id;

ID LZ_TYPE LZ_ID NAME NAME
---------- -------------------- ---------- ---------- ----------
001 XUEXIAO_ID 1 张三 一中
002 NIANJI_ID 11 李四 一中
003 NIANJI_ID 22 王五 二中
004 BANJI_ID 111 刘七 一中
005 BANJI_ID 222 陈八 二中

SQL>
大力 2011-05-22
  • 打赏
  • 举报
回复
修正一下
select STU.id , decode(LZ_TYPE,'BANJI_TYPE',LZ_ID,'XXXX'), XUEXIAO.name from STU left join ...
union
select STU.id , decode(LZ_TYPE,'NIANJI_TYPE',LZ_ID,'XXXX'), XUEXIAO.name from STU left join ...
union
select STU.id , decode(LZ_TYPE,'XUEXIAO_TYPE',LZ_ID,'XXXX'), XUEXIAO.name from STU left join ...

1. XXXX 要是一个不会出现的特别的ID
2. Left join 部分就是by 相应的ID 去找 XUEXIAO.name
大力 2011-05-22
  • 打赏
  • 举报
回复
select id , decode('BANJI_TYPE',LZ_ID,'XXXX') from STU left join ...
union
select id , decode('NIANJI_TYPE',LZ_ID,'XXXX') from STU left join ...
union
select id , decode('XUEXIAO_TYPE',LZ_ID,'XXXX') from STU left join ...

1. XXXX 要是一个不会出现的特别的ID
2. Left join 部分就是by 相应的ID 去找 地区

17,089

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧