2016-11-29 11 views
1

を探します。たとえば、CourseAがCourseBの前提条件であり、CourseBがCourseAの前提条件(簡略化された例)であったとします。私の結果は、満足できない前提条件を持つコースの名前でなければなりません。この場合、CourseAとCourseBの両方が成立します。OracleのSQLは、以下に定義する私は2つのテーブルを持っている円形の前提条件

+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

は、サイクルに2つ以上の項目がある場合は機能しません(たとえば、コースAではコースAが必要なコースCを必要とするコースBが必要です)。むしろ、それはあなたにサイクルの開始と終了を与えますが、その間の値はありません。コースBは1サイクルであると報告されない。 – Boneist

+0

は私にとってうまくいくようですか?サイクルの一部であるすべてのコースを含みます – LEJ

+0

@Boneist - sys_connect_by_pathはパスに沿ったすべてのノードをリストします。 – mathguy

関連する問題