回答編集履歴
8
スキーマの削除
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
|
19
|
+
FROM course c
|
20
|
-
LEFT JOIN
|
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
追記
answer
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
下記としてみましたが、いかがでしょうか。
|
2
|
-
ただし、
|
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
追記
answer
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
下記としてみましたが、いかがでしょうか。
|
2
|
+
ただし、前提科目(prereq)として複数の前提科目を持つ科目、を指定した場合に講義コードが重複して出力されてしまうようです。
|
2
3
|
|
3
4
|
```sql
|
4
5
|
SELECT
|
5
スキーマの付与
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の修正
answer
CHANGED
@@ -8,18 +8,19 @@
|
|
8
8
|
FROM
|
9
9
|
(
|
10
10
|
SELECT
|
11
|
-
course_number,
|
11
|
+
c.course_number ,
|
12
|
+
CASE
|
12
|
-
|
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
|
-
|
18
|
+
FROM course c
|
18
|
-
|
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
スキーマの付与
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
書式の改善
answer
CHANGED
@@ -1,10 +1,16 @@
|
|
1
1
|
下記としてみましたが、いかがでしょうか。
|
2
2
|
|
3
3
|
```sql
|
4
|
+
SELECT
|
5
|
+
course_number "Course",
|
4
|
-
|
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
|
-
|
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修正
answer
CHANGED
@@ -1,13 +1,10 @@
|
|
1
|
-
ま
|
1
|
+
下記としてみましたが、いかがでしょうか。
|
2
2
|
|
3
3
|
```sql
|
4
|
-
SELECT
|
5
|
-
t1.course_number
|
6
|
-
|
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
|
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
|
-
|
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
|
-
|
17
|
+
GROUP BY course_number, course_name
|
35
|
-
ORDER BY 1;
|
18
|
+
ORDER BY 1;
|
36
19
|
```
|