求一SQL语句,在线等~~~

Allan168 2005-04-11 04:30:35
oracle数据库,我的表结构如下:

新闻表a结构:
ID (新闻ID)
Title (新闻标题)
Type (新闻类型,与b表ID对应)
Content (新闻内容)

新闻类型表b结构
ID (类型ID)
Type (新闻类型)
ImageUrl (表示此类型的图片)

我想实现的是:取出b表中的所有类型即Type,和ImageUrl
并找到a表中各自属于这些类型的新闻标题(Title字段)
每种类型下都有很多条,但我只要每种类型的前4条(rownum=1,rownum=2,rownum=3,rownum=4)
和每种类型下rownum=1的新闻的内容(Content字段)

也就是说,我需要这7个元素(需要重命名,即as),比如:
7个元素:b.Type b.ImageUrl a.Title1 a.Content1
a.Title2
a.Title3
a.Title4

解释:a.Title1,a.Title2,a.Title3,a.Title4
表示:表a中属同一类型的第1/2/3/4条记录的Title值;

求此SQL语句,在线等,各位帮帮忙吧,小弟感激不尽~~~
...全文
149 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Croatia 2005-04-15
  • 打赏
  • 举报
回复
这个还是比较容易做的。

使用rank函数,可以实现的。

问题是,你的问题,我还是觉得混乱。赫赫。你的新闻类型表b的ID,type干什么用的。怎么和A关联的。你写的你的A表的Type和b表ID对应,是对的吗?
Croatia 2005-04-15
  • 打赏
  • 举报
回复
你的A表的Type和b表ID对应?


Allan168 2005-04-15
  • 打赏
  • 举报
回复
hchxxzx(NET?摸到一点门槛) 请进来领分呀

另外,在程序里调用您写的oracle数据库函数怎么调呀,

或者提供关于这方面的资料我自己去看也行呀~~~
hchxxzx 2005-04-15
  • 打赏
  • 举报
回复
总算是可以了,LONG字段在单独求取的时候,可以求得出来,但在参与联合求取的时候,就报告"非法使用LONG字段",后来想了个办法,也做一个函数求取,其中还多有奥妙,如return VARCHAR2 is Result long此句,前面的varchar2如果改为long则仍出现前述错误,但改成varchar2后,可正常求取(但不知道会不会超过4000个字节后求取不出来?测了一下,可能在字节数超过4000时会出问题.所以最好还是把字段改为CLOB)
SQL语句如下:

假设newb是类型表,newa是新闻表
SELECT a.type,
    a.imageurl,
f_gettitle(a.type,1) title1,
f_getlong(a.type,1) content1,
f_gettitle(a.type,2) title2,
f_gettitle(a.type,3) title3,
f_gettitle(a.type,4) title4
FROM newb a

写个函数来求取
create or replace function f_gettitle(stype in varchar2, sno in NUMBER) return VARCHAR2 is
Result varchar2(200);
BEGIN

SELECT title
INTO RESULT
FROM
(
SELECT rownum sid,a.title
FROM newa a
WHERE a.type = stype
AND rownum <= sno
)
WHERE sid = sno;

return(Result);
end f_gettitle;

//求取LONG字段值
create or replace function f_gettitle(stype in varchar2, sno in NUMBER) return VARCHAR2 is
Result long;
BEGIN

SELECT title
INTO RESULT
FROM
(
SELECT rownum sid,a.content
FROM newa a
WHERE a.type = stype
AND rownum <= sno
)
WHERE sid = sno;

return(Result);
end f_gettitle;
renohong 2005-04-15
  • 打赏
  • 举报
回复
我看不懂,讲详细点
hchxxzx 2005-04-15
  • 打赏
  • 举报
回复
谢谢,接分
Allan168 2005-04-15
  • 打赏
  • 举报
回复
select funcGetName(id) from .....

------------------------------

直接调用不行,报错:无效列名

http://community.csdn.net/Expert/topic/3939/3939423.xml?temp=.4149744
我的另一个贴子说的详细点,如果你有时间的话,帮忙看看吧~~~~
Croatia 2005-04-15
  • 打赏
  • 举报
回复
啊?

就是和直接调用oracle本身的函数一样

比如,我做了一个函数,funcGetName(id)

select funcGetName(id) from .....

就可以了。


假如你是返回的游标,用recordset可以接受。

暂时,我手头上没有资料。

rank是oracle本身的一个函数。
Allan168 2005-04-15
  • 打赏
  • 举报
回复
to:Croatia(Croatia) ( )
-----------------------

你知道在程序里调用oracle数据库函数怎么调么?

或者提供关于这方面的资料我自己去看也行呀~~~
Allan168 2005-04-15
  • 打赏
  • 举报
回复
表a的Type(number)和表b的ID(number)对应啊

rank函数是什么?
Allan168 2005-04-11
  • 打赏
  • 举报
回复
上面 table1 就是a
table2 就是b
Allan168 2005-04-11
  • 打赏
  • 举报
回复
因为我用asp.net的DataList控件实现,所以需要这7个as出来的字段与DataList分别绑定
如下:
<%# DataBinder.Eval(Container.DataItem,"b.Type") %>
<%# DataBinder.Eval(Container.DataItem,"b.ImageUrl") %>
<%# DataBinder.Eval(Container.DataItem,"a.title1") %>
<%# DataBinder.Eval(Container.DataItem,"a.Content1") %>
<%# DataBinder.Eval(Container.DataItem,"a.title2") %>
<%# DataBinder.Eval(Container.DataItem,"a.title3") %>
<%# DataBinder.Eval(Container.DataItem,"a.title4") %>

页面像这样:
--------------------------------------------------
table2.Type
--------------------------------------------------
| table1.Title1
|-----------------------------
| table1.Content1
table2.ImageUrl |
|
|
---------------------------------------------------
table1.Title2
---------------------------------------------------
table1.Title3
---------------------------------------------------
table1.Title4
---------------------------------------------------

但怎么实现先不管,我现在只要用一SQL语句取出以上所说的7个元素

17,086

社区成员

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

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