一个表(tb_class)记录了新闻分类情况,其中的PID代表父分类编号,PID为0代表无上级分类,结构如下:
CID CNAME PID
----------------------------------
1 国内新闻 0
2 国际新闻 0
3 地方新闻 1
4 社会新闻 1
5 世界军事 2
6 各国军种 5
......通过程序中使用递归算法可得到如下的树状结构国内新闻
|--地方新闻
|--社会新闻
国际新闻
|--世界军事
|--各国军种
......
另一表记录了新闻内容(tb_news),结构如下:NEWSID CLASSID TITLE
-------------------
1 1 西安120亿包装城墙被指为涨地价
2 1 详解录取流程
3 2 俄用4名囚犯换回10名间谍
4 6 10人在纽约出庭认罪
......
当我在查询语句中使用select * from tb_news where classid=2 时只能查询到(国际新闻 PID=2)的文章,我想要结果是取得全部属于国际新闻的文章(包括它的子分类)有没有办法用SQL语句(或存储过程)一次性获得呢?
CID CNAME PID
----------------------------------
1 国内新闻 0
2 国际新闻 0
3 地方新闻 1
4 社会新闻 1
5 世界军事 2
6 各国军种 5
......通过程序中使用递归算法可得到如下的树状结构国内新闻
|--地方新闻
|--社会新闻
国际新闻
|--世界军事
|--各国军种
......
另一表记录了新闻内容(tb_news),结构如下:NEWSID CLASSID TITLE
-------------------
1 1 西安120亿包装城墙被指为涨地价
2 1 详解录取流程
3 2 俄用4名囚犯换回10名间谍
4 6 10人在纽约出庭认罪
......
当我在查询语句中使用select * from tb_news where classid=2 时只能查询到(国际新闻 PID=2)的文章,我想要结果是取得全部属于国际新闻的文章(包括它的子分类)有没有办法用SQL语句(或存储过程)一次性获得呢?
connect by prior a.classid = b.pid
where a.classid=2;
where CLASSID in
(select cid
from tb_class
start with cid=2
connect by pid=prior cid)
from tb_news a
where a.classid in (
select cid
from tb_class
start with cid = 2
connect by prior cid = pid
);