
求一条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
不知道这个是不是能够满足你
------解决方案--------------------
你要实现的是什么?.
根据你的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 with e.Courese='Courese3' connect by nocycle prior e.id=e.qzid or prior e.qzid=e.id
order by id
显示的是
6 Courese3 5