質問するログイン新規登録

回答編集履歴

8

スキーマの削除

2017/10/22 09:04

投稿

退会済みユーザー
answer CHANGED
@@ -16,8 +16,8 @@
16
16
  ELSE SYS_CONNECT_BY_PATH(p.prereq, '/')
17
17
  END prereq,
18
18
  c.course_name
19
- FROM eb.course c
19
+ FROM course c
20
- LEFT JOIN eb.prereq p ON c.course_number = p.course_number
20
+ LEFT JOIN prereq p ON c.course_number = p.course_number
21
21
  START WITH p.prereq IS NULL
22
22
  CONNECT BY PRIOR c.course_number = p.prereq
23
23
  ) t

7

追記

2017/10/22 09:04

投稿

退会済みユーザー
answer CHANGED
@@ -1,5 +1,5 @@
1
1
  下記としてみましたが、いかがでしょうか。
2
- ただし、前提科目(prereq)として複数の前提科目を持つ科目を指定した場合に講義コードが重複して出力されてしまうようです。
2
+ ただし、必修科目(prereq)として、さらにその前提として複数の必修科目を持つ科目を指定した場合に、SYS_CONNECT_BY_PATHで取得する都合上、講義コード(course_number)が重複して出力されてしまうようです。
3
3
 
4
4
  ```sql
5
5
  SELECT
@@ -23,5 +23,4 @@
23
23
  ) t
24
24
  GROUP BY course_number, course_name
25
25
  ORDER BY 1;
26
-
27
26
  ```

6

追記

2017/10/19 14:23

投稿

退会済みユーザー
answer CHANGED
@@ -1,4 +1,5 @@
1
1
  下記としてみましたが、いかがでしょうか。
2
+ ただし、前提科目(prereq)として複数の前提科目を持つ科目、を指定した場合に講義コードが重複して出力されてしまうようです。
2
3
 
3
4
  ```sql
4
5
  SELECT

5

スキーマの付与

2017/10/19 14:20

投稿

退会済みユーザー
answer CHANGED
@@ -15,8 +15,8 @@
15
15
  ELSE SYS_CONNECT_BY_PATH(p.prereq, '/')
16
16
  END prereq,
17
17
  c.course_name
18
- FROM course c
18
+ FROM eb.course c
19
- LEFT JOIN prereq p ON c.course_number = p.course_number
19
+ LEFT JOIN eb.prereq p ON c.course_number = p.course_number
20
20
  START WITH p.prereq IS NULL
21
21
  CONNECT BY PRIOR c.course_number = p.prereq
22
22
  ) t

4

SQLの修正

2017/10/19 14:04

投稿

退会済みユーザー
answer CHANGED
@@ -8,18 +8,19 @@
8
8
  FROM
9
9
  (
10
10
  SELECT
11
- course_number,
11
+ c.course_number ,
12
+ CASE
12
- CASE WHEN SYS_CONNECT_BY_PATH(prereq, '/') = '/' THEN '' ELSE SYS_CONNECT_BY_PATH(prereq, '/') END prereq,
13
+ WHEN SYS_CONNECT_BY_PATH(p.prereq, '/') = '/'
14
+ THEN ''
15
+ ELSE SYS_CONNECT_BY_PATH(p.prereq, '/')
16
+ END prereq,
13
- course_name
17
+ c.course_name
14
- FROM
15
- (
16
- SELECT c.course_name, p.prereq, c.course_number
17
- FROM eb.course c
18
+ FROM course c
18
- LEFT JOIN eb.prereq p ON c.course_number = p.course_number
19
+ LEFT JOIN prereq p ON c.course_number = p.course_number
19
- ) t
20
- START WITH prereq IS NULL
20
+ START WITH p.prereq IS NULL
21
- CONNECT BY PRIOR course_number = prereq
21
+ CONNECT BY PRIOR c.course_number = p.prereq
22
22
  ) t
23
23
  GROUP BY course_number, course_name
24
24
  ORDER BY 1;
25
+
25
26
  ```

3

スキーマの付与

2017/10/19 14:03

投稿

退会済みユーザー
answer CHANGED
@@ -14,8 +14,8 @@
14
14
  FROM
15
15
  (
16
16
  SELECT c.course_name, p.prereq, c.course_number
17
- FROM course c
17
+ FROM eb.course c
18
- LEFT JOIN prereq p ON c.course_number = p.course_number
18
+ LEFT JOIN eb.prereq p ON c.course_number = p.course_number
19
19
  ) t
20
20
  START WITH prereq IS NULL
21
21
  CONNECT BY PRIOR course_number = prereq

2

書式の改善

2017/10/19 13:45

投稿

退会済みユーザー
answer CHANGED
@@ -1,10 +1,16 @@
1
1
  下記としてみましたが、いかがでしょうか。
2
2
 
3
3
  ```sql
4
+ SELECT
5
+ course_number "Course",
4
- SELECT course_number, COALESCE(REPLACE(LISTAGG(prereq, '/') WITHIN GROUP (ORDER BY prereq ASC NULLS LAST), '//', ''), '-') prereq, course_name
6
+ COALESCE(REPLACE(LISTAGG(prereq, '/') WITHIN GROUP (ORDER BY prereq ASC NULLS LAST), '//', ''), '-') "Prerequisite(s)",
7
+ course_name "Course Name"
5
8
  FROM
6
9
  (
10
+ SELECT
11
+ course_number,
7
- SELECT course_number, CASE WHEN SYS_CONNECT_BY_PATH(prereq, '/') = '/' THEN '' ELSE SYS_CONNECT_BY_PATH(prereq, '/') END prereq, course_name
12
+ CASE WHEN SYS_CONNECT_BY_PATH(prereq, '/') = '/' THEN '' ELSE SYS_CONNECT_BY_PATH(prereq, '/') END prereq,
13
+ course_name
8
14
  FROM
9
15
  (
10
16
  SELECT c.course_name, p.prereq, c.course_number

1

SQL修正

2017/10/19 13:43

投稿

退会済みユーザー
answer CHANGED
@@ -1,13 +1,10 @@
1
- だ途中です一旦投稿ます
1
+ 下記としてみした、いかがでょうか
2
2
 
3
3
  ```sql
4
- SELECT
5
- t1.course_number
6
- , listagg(t2.prereq || '/' || t1.prereq, '/') WITHIN GROUP (ORDER BY t2.prereq DESC NULLS LAST) prereq
4
+ SELECT course_number, COALESCE(REPLACE(LISTAGG(prereq, '/') WITHIN GROUP (ORDER BY prereq ASC NULLS LAST), '//', ''), '-') prereq, course_name
7
- , t1.course_name
8
5
  FROM
9
- (
6
+ (
10
- SELECT course_name, course_number, prereq
7
+ SELECT course_number, CASE WHEN SYS_CONNECT_BY_PATH(prereq, '/') = '/' THEN '' ELSE SYS_CONNECT_BY_PATH(prereq, '/') END prereq, course_name
11
8
  FROM
12
9
  (
13
10
  SELECT c.course_name, p.prereq, c.course_number
@@ -16,21 +13,7 @@
16
13
  ) t
17
14
  START WITH prereq IS NULL
18
15
  CONNECT BY PRIOR course_number = prereq
19
- ) t1
20
- LEFT JOIN
21
- (
22
- SELECT course_number, prereq
23
- FROM
24
- (
25
- SELECT p.prereq, c.course_number
26
- FROM course c
27
- LEFT JOIN prereq p ON c.course_number = p.course_number
28
- ) t
16
+ ) t
29
- START WITH prereq IS NULL
30
- CONNECT BY PRIOR course_number = prereq
31
- ) t2
32
- ON t1.prereq = t2.course_number
33
- GROUP BY
34
- t1.course_number, t1.course_name
17
+ GROUP BY course_number, course_name
35
- ORDER BY 1;
18
+ ORDER BY 1;
36
19
  ```