急求助orcale存储过程如何实现查询多表?

xucxi 2005-06-29 03:09:50

如下表:
AU_ID AU_NAME PHONE ADRESS CITY
------ --------------- ---------- -----------------------------------
A001 王二 74588
A002 张三 4589
A003 李四 34474590
A004 赵五 12421112

AU_ID TITLE_id AU_ORD(第几作者) FEE
------ ------ ---------- ----------
A001 T0001 1 5000
A002 T0001 2 3000
A001 T0002 1 4000
A003 T0003 1 5000
A002 T0004 1 7000

TITLE_id TITLE_NAME BOOKTYPE PRICE
------ ------------ ---------- ---------- ---------- ---------- ---------- ----------
T0001 sybase 数据库 10
T0002 oracle 数据库 15
T0003 sybase 数据库 20
T0004 C/C++ 编程语言

查询上述三表需要得到下面这个结果:
TITLE_id au_NAME(第一作者) au_name2(第二作者)
T0001 王二 张三
T0002 王二
T0003 李四
T0004 张三

本人初学oracle,老师提示可建立一张中间表,老是搞不清楚该怎么建,也不知道该怎么建立oracle查询的存储过程。请各位帮忙解答,谢谢!

...全文
232 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
辉说慧语 2005-07-07
  • 打赏
  • 举报
回复
mark
xucxi 2005-06-29
  • 打赏
  • 举报
回复
谢谢你
沝林 2005-06-29
  • 打赏
  • 举报
回复
漏了price
select b.TITLE_id,c.TITLE_NAME,c.BOOKTYPE,c.price,max(decode(b.AU_ORD,1,a.AU_NAME)) au_NAME1,max(decode(b.AU_ORD,2,a.AU_NAME)) au_name2
from table1 a ,table2 b,table3 c
where a.AU_ID = b.AU_ID and b.TITLE_id = c.TITLE_id
group by b.TITLE_id,c.TITLE_NAME,c.BOOKTYPE,c.price
沝林 2005-06-29
  • 打赏
  • 举报
回复
select b.TITLE_id,c.TITLE_NAME,c.BOOKTYPE,max(decode(b.AU_ORD,1,a.AU_NAME)) au_NAME1,max(decode(b.AU_ORD,2,a.AU_NAME)) au_name2
from table1 a ,table2 b,table3 c
where a.AU_ID = b.AU_ID and b.TITLE_id = c.TITLE_id
group by b.TITLE_id,c.TITLE_NAME,c.BOOKTYPE
xucxi 2005-06-29
  • 打赏
  • 举报
回复
非常感谢楼上的,很抱歉我忘记了还要加上表3的booktype,price,title_name一起查询,我试了一下提示说
price
*ORA-00979: 不是 GROUP BY 表达式


是不是先用你给的语句生成一个表再与表3合并(怎么合并?)?谢谢
沝林 2005-06-29
  • 打赏
  • 举报
回复
不好意思,group by 的字段写错了
select b.TITLE_id,max(decode(b.AU_ORD,1,a.AU_NAME)) au_NAME1,max(decode(b.AU_ORD,2,a.AU_NAME)) au_name2
from table1 a ,table2 b
where a.AU_ID = b.AU_ID
group by b.TITLE_id
xucxi 2005-06-29
  • 打赏
  • 举报
回复
谢谢楼上的,我执行了你的语句显示’非单组分组函数‘(是不是因为行数不一样?)

因为au_name2只有T0001有第二作者 ,我又生成了1个第二作者表如下:

TITLE_id au_name2(第二作者)
T0001 张三

但我不知道如何连接表1和上表,使得生成
TITLE_id au_NAME(第一作者) au_name2(第二作者)
T0001 王二 张三
T0002 王二
T0003 李四
T0004 张三

这两个表行列数并不一样,用oracle语句该如何连接呢?
另外这个查询用存储过程怎么完成?
1楼和二楼的大侠帮帮忙,谢谢!


沝林 2005-06-29
  • 打赏
  • 举报
回复
为什么要中间表,1个SQL就可以了阿

select b.TITLE_id,max(decode(b.AU_ORD,1,a.AU_NAME)) au_NAME1,max(decode(b.AU_ORD,2,a.AU_NAME)) au_name2
from table1 a ,table2 b
where a.AU_ID = b.AU_ID
group by a.AU_ID
nowait 2005-06-29
  • 打赏
  • 举报
回复
用lead()over()函数一条语句可以得到你要的结果,查查资料吧。要是实在不会晚些时候会给出你要的语句的^_^

17,089

社区成员

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

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