回答編集履歴

5

追記

2021/12/23 03:55

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -63,3 +63,5 @@
63
63
  where tgt.主キー=src.主キー
64
64
 
65
65
  ```
66
+
67
+ 追加も更新も必要なら、insert into on conflict でupsertするのが効率良いかと思います。

4

追記

2021/12/23 03:55

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -1,6 +1,8 @@
1
1
  以下の様なSELECTを元に処理すればば良いかと思います。
2
2
 
3
- カラムの並びを指定したい場合はarray_agg()(※[9.21.集約関数](https://www.postgresql.jp/document/13/html/functions-aggregate.html))で指定して下さい
3
+ カラムの並びを指定したい場合はarray_agg()(※[9.21.集約関数](https://www.postgresql.jp/document/13/html/functions-aggregate.html))で指定します
4
+
5
+ ※行番号が1,2共に存在していることが前提です。(1の欠番が無い)
4
6
 
5
7
  ```SQL
6
8
 
@@ -10,9 +12,9 @@
10
12
 
11
13
  values ('001','グループ1','野菜')
12
14
 
13
- ), tblB(主キー, カラムC) as (
15
+ ), tblB(主キー, 行番号, カラムC) as (
14
16
 
15
- values ('001','ごぼう'), ('001','ほうれん草')
17
+ values ('001',1,'ごぼう'), ('001',2,'ほうれん草')
16
18
 
17
19
  )
18
20
 
@@ -22,7 +24,7 @@
22
24
 
23
25
  inner join (
24
26
 
25
- select 主キー, array_agg(カラムC) as カラムagg
27
+ select 主キー, array_agg(カラムC order by 行番号) as カラムagg
26
28
 
27
29
  from tblB
28
30
 
@@ -50,7 +52,7 @@
50
52
 
51
53
  from (
52
54
 
53
- select 主キー, array_agg(カラムC) as カラムagg
55
+ select 主キー, array_agg(カラムC order by 行番号) as カラムagg
54
56
 
55
57
  from tblB
56
58
 

3

追記

2021/12/23 03:06

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -1,4 +1,4 @@
1
- 以下の様なSELECTを元にテーブルAに**update**を行えば良いかと思います。
1
+ 以下の様なSELECTを元に処理すれ良いかと思います。
2
2
 
3
3
  カラムの並びを指定したい場合はarray_agg()(※[9.21.集約関数](https://www.postgresql.jp/document/13/html/functions-aggregate.html))で指定して下さい。
4
4
 
@@ -35,3 +35,29 @@
35
35
  ```
36
36
 
37
37
  ※**with**部分はテーブルA,Bの値を指定している部分ですので、実際には省いて下さい。
38
+
39
+
40
+
41
+ 質問ではinsertになっていますが、テーブルAに対して行うなら、updateですね。
42
+
43
+ ```SQL
44
+
45
+ update tblA tgt set
46
+
47
+ カラムD=src.カラムagg[1]
48
+
49
+ , カラムE=src.カラムagg[2]
50
+
51
+ from (
52
+
53
+ select 主キー, array_agg(カラムC) as カラムagg
54
+
55
+ from tblB
56
+
57
+ group by 主キー
58
+
59
+ ) src
60
+
61
+ where tgt.主キー=src.主キー
62
+
63
+ ```

2

訂正

2021/12/23 03:03

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -1,4 +1,4 @@
1
- 以下の様なSELECTを元にinsert into selectを行えば良いかと思います。
1
+ 以下の様なSELECTを元にテーブルAに**update**を行えば良いかと思います。
2
2
 
3
3
  カラムの並びを指定したい場合はarray_agg()(※[9.21.集約関数](https://www.postgresql.jp/document/13/html/functions-aggregate.html))で指定して下さい。
4
4
 

1

追記

2021/12/23 02:57

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -33,3 +33,5 @@
33
33
  on ta.主キー=tb.主キー
34
34
 
35
35
  ```
36
+
37
+ ※**with**部分はテーブルA,Bの値を指定している部分ですので、実際には省いて下さい。