日期:2014-05-17  浏览次数:20904 次

一条SQL 自连接查询问题
本帖最后由 gdalbert 于 2013-09-27 11:12:09 编辑


求一条SQL自连接查询语句,要求在where 子句中“ 科目 = ‘ ( ) ' ” 的括号内为填上Course1、Course2、Course3、Course4任何一个,都显示上述列表中的4条记录,即搜索其中一个科目,均显示相关联的其他三个

(字段前置ID为前置科目的编号,假设列表中科目和ID均唯一)。

------解决方案--------------------
递归查询:

select * from course where id in(
select * from course start with id=( select id from course where 科目 in ('course1'))
connect by id=prior 前置ID union all
select * from course start with id=( select id from course where 科目 in ('course1'))
connect by prior id= 前置ID);
------解决方案--------------------
WITH a AS
(
SELECT '4' id,'Courese1' Courese,' ' qzid FROM dual union all
SELECT '5' id,'Courese2' Courese,'4' qzid FROM dual union all
SELECT '6' id,'Courese3' Courese,'5' qzid FROM dual union all
SELECT '7' id,'Courese4' Courese,'6' qzid FROM dual 
)
select level,e.* from a e  start with e.Courese='Courese2' connect by  e.id= prior e.qzid  
order by level desc 

不知道这个是不是能够满足你 
------解决方案--------------------
引用:
Quote: 引用:

递归查询:

select * from course where id in(
select * from course start with id=( select id from course where 科目 in ('course1'))
connect by id=prior 前置ID union all
select * from course start with id=( select id from course where 科目 in ('course1'))
connect by prior id= 前置ID);

ORACLE提示值太多
不过我已经在其他地方知道了。

select ID,科目,前置id 
from course 
start with 科目='Course4' 
connect by nocycle prior id=前置id or prior 前置id=id 
order by id

但还是要谢谢你!

你要实现的是什么?.
根据你的sql实现的是

WITH a AS
(
SELECT '4' id,'Courese1' Courese,' ' qzid FROM dual union all
SELECT '5' id,'Courese2' Courese,'4' qzid FROM dual union all
SELECT '6' id,'Courese3' Courese,'5' qzid FROM dual union all
SELECT '7' id,'Courese4' Courese,'6' qzid FROM dual 
)
select e.* from a e start&n