有三张表
学生表
ID NAME
1 张三
2 李四教师表
ID NAME
1 张老师
2 李老师
汇总表
ID TNAME TID
1 学生表 2
2 教师表 1
现在用一条SQL结果要得:
ID TNAME NAME
1 学生表 李四
2 教师表 张老师
用这样是可以实现:
SELECT ID,TNAME,
DECODE(TNAME,
'学生表',
(Select Name from 学生表 Where ID = TID)
'教师表',
(Select Name from 教师表 Where ID = TID) ) NAME
FROM 汇总表
但是这样太麻烦了,因为现实中的数据是非常多的
请大家帮忙想想,有什么好方法吗?谢谢大家了!
学生表
ID NAME
1 张三
2 李四教师表
ID NAME
1 张老师
2 李老师
汇总表
ID TNAME TID
1 学生表 2
2 教师表 1
现在用一条SQL结果要得:
ID TNAME NAME
1 学生表 李四
2 教师表 张老师
用这样是可以实现:
SELECT ID,TNAME,
DECODE(TNAME,
'学生表',
(Select Name from 学生表 Where ID = TID)
'教师表',
(Select Name from 教师表 Where ID = TID) ) NAME
FROM 汇总表
但是这样太麻烦了,因为现实中的数据是非常多的
请大家帮忙想想,有什么好方法吗?谢谢大家了!
解决方案 »
- 谁有ORACLE11G安装程序啊
- regexp_like的问题
- 寻求分组sql,在线等待
- oracle 9i定时运行sql语句
- 视图创建问题
- 请高手指点迷津,看看这句SQL文错在哪了?
- 如何让时间自增
- vb ADO访问Oracle数据库,第100条记录后是乱码,如何解决?急!
- 请问哪里有PL/SQL Developer5.0.1.480的相关教程吗?
- 菜鸟求助,写了一个存储过程,报错提示:pls:object is invailid ;pl/sqlstatement ignored
- ==== oracle奇怪现象,一个简单的update语句不能执行。 ====
- 祝學:ORACLE建表、存儲過程問題?
@v_str varchar2(20);
@sql varchar2(100);
@sql :='select 0 from dual';
begin
foreach @v_str in (select tname from 汇总表) loop
@sql :=@sql||'union all SELECT id,tname,(select name from'||@v_str||' where tid=id) name FROM 汇总表';
end loop;
execute immediate @sql;
end;大概就这样做,我由于没有测试一下,请见谅,大概就这个思路!
ID,
TNAME,
b.name || c.name as NAME
FROM 汇总表 a
left outer join 学生表 b
on ( a.TID = b.ID )
left outer join 教师表 c
on ( a.TID = c.ID )
教师表,(SELECT NAME FROM 教师表 WHERE ID = A.TID)) AS NAME
FROM 汇总表 a如果表越来越多,那SQL语句就会越来越长啊
ID,
TNAME,
decode(TNAME,'学生表',b.name ,c.name) as NAME
FROM 汇总表 a,学生表 b,教师表 c
where a.TID = b.ID(+)
and a.TID = c.ID (+)