回答編集履歴
3
質問を勘違いしていました。
answer
CHANGED
@@ -1,19 +1,25 @@
|
|
1
1
|
手元に実行環境がないので不確実ですが、
|
2
2
|
|
3
3
|
```sql
|
4
|
+
UPDATE
|
5
|
+
data_table
|
6
|
+
SET
|
4
|
-
|
7
|
+
data_table.no = T.no
|
8
|
+
FROM
|
9
|
+
data_table
|
10
|
+
INNER JOIN
|
5
|
-
(SELECT
|
11
|
+
(SELECT
|
12
|
+
sort_table.cd cd,
|
13
|
+
no_table.no + ROW_NUMBER() OVER(ORDER BY sort_table.sort) no
|
14
|
+
FROM
|
6
|
-
|
15
|
+
sort_table,no_table
|
7
|
-
FROM no_table,sort_table WHERE data_table.cd = sort_table.cd
|
8
|
-
)
|
16
|
+
) T
|
17
|
+
ON
|
9
|
-
|
18
|
+
data_table.cd = T.cd
|
19
|
+
WHERE
|
10
|
-
|
20
|
+
data_table.no IS Null
|
11
21
|
```
|
12
22
|
|
23
|
+
という感じでしょうか?
|
13
|
-
|
24
|
+
SETでのサブクエリは結果が一件でないとエラーになってしまいます。
|
14
|
-
|
15
|
-
2. サブクエリで別のデータテーブルをJOINしてしまうとサブクエリでの取得結果が複数になってしまうため、メインクエリのデータテーブルとJOINさせます。
|
16
|
-
|
17
|
-
|
25
|
+
また、一件だと10001になってしまうのは、結果が一件だとROW_NUMBERは必ず1を返すからです。
|
18
|
-
|
19
|
-
理屈的にはいけるはずですがだめでしたらごめんなさい
|
2
10001になる理由を追記
answer
CHANGED
@@ -14,6 +14,6 @@
|
|
14
14
|
|
15
15
|
2. サブクエリで別のデータテーブルをJOINしてしまうとサブクエリでの取得結果が複数になってしまうため、メインクエリのデータテーブルとJOINさせます。
|
16
16
|
|
17
|
-
3. ソートテーブルは番号順に並んでいるのでここで分析関数は必要ありません。
|
17
|
+
3. ソートテーブルは番号順に並んでいるのでここで分析関数は必要ありません。(ここがポイント!全て10001になってしまうのは結果が一件だとROWNUMは常に1を返すからです。)
|
18
18
|
|
19
19
|
理屈的にはいけるはずですがだめでしたらごめんなさい
|
1
FROM句が抜けてました
answer
CHANGED
@@ -6,6 +6,7 @@
|
|
6
6
|
no_table.no + sort_table.sort
|
7
7
|
FROM no_table,sort_table WHERE data_table.cd = sort_table.cd
|
8
8
|
)
|
9
|
+
FROM data_table
|
9
10
|
WHERE data_table.no IS NULL;
|
10
11
|
```
|
11
12
|
|