2016-11-29 8 views
1

찾기 :오라클 SQL은 내가 두 테이블이 원형 전제 조건

Course(Worker_id, Course_id) 
      Primary key is (Worker_id, Course_id) 

    Prerequisite(Course_id, Prerequisite_id) 
      Primary key is (Course_id, Prerequisite_id) 

내가 좋아하는 것 모두 원형 전제 조건을 찾을 수 있도록. 예를 들어 CourseA가 CourseB의 전제 조건이었고 CourseB가 CourseA (단순화 된 예)의 전제 조건이었습니다. 내 결과는 충족 할 수없는 전제 조건을 가진 코스의 이름이어야합니다.이 경우 CourseA와 CourseB 모두입니다.

+0

사용중인 Oracle 버전은 무엇입니까? –

+0

Oracle Database 11g Enterprise Edition 릴리스 11.2.0.4.0 – LEJ

+0

주기에 2 개 이상의 코스가있을 수있는 경우 해결책을 보려면 [이 응답] (http://stackoverflow.com/a/5803666/4479309)을 참조하십시오. – Boneist

답변

4
SELECT SYS_CONNECT_BY_PATH(Course_id, ' -> ') AS path 
FROM prerequisites 
WHERE CONNECT_BY_ISCYCLE = 1 
CONNECT BY NOCYCLE 
     PRIOR Course_id = Prerequisite_id; 
+0

사이클에 두 개 이상의 항목이있는 경우 (예 : 코스 A에는 코스 A가 필요한 코스 C가 필요한 코스 B가 필요함) 오히려주기의 시작과 끝을 알려주지 만 그 중간의 값은 제공하지 않습니다. 코스 B는 사이클에있는 것으로보고되지 않습니다. – Boneist

+0

이 나를 위해 잘 작동하는 것 같습니다. 사이클의 일부인 모든 코스를 포함합니다. – LEJ

+0

@Boneist - sys_connect_by_path는 경로의 모든 노드를 나열합니다. – mathguy