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

回答編集履歴

1

追記

2017/07/04 21:12

投稿

hatena19
hatena19

スコア34377

answer CHANGED
@@ -2,4 +2,85 @@
2
2
 
3
3
  2つのSQLを UNION してますが、それぞれのSQLを単独で実行した場合、どちらのSQLでエラーがでますか。
4
4
 
5
- エラーが出たほうのSQLをデザインビューにして、その画像を添付してもらえますか。
5
+ エラーが出たほうのSQLをデザインビューにして、その画像を添付してもらえますか。
6
+
7
+ コメントを受けて追記
8
+ ---
9
+
10
+ 質問者さんの 2017/07/03 15:53コメントから引用
11
+ ```
12
+ public_groupandpeople
13
+ *parentid *childid
14
+ ----------------------------
15
+ GR0000 GR0001
16
+ GR0000 GR0002
17
+ GR0000 GR0003
18
+ GR0001 GR0001X
19
+ GR0001 GR0001Y
20
+ GR0002 GR0002X
21
+ GR1000 GR1001
22
+ GR1001 GR1001X
23
+ GR1001 GR1001Y
24
+
25
+ ```
26
+ このテーブルは下記のような階層モデルを表していると思います。
27
+
28
+ ```
29
+ GR0000┬GR0001┬GR0001X
30
+    │   └GR0001Y
31
+    ├GR0002─GR0002X
32
+    └GR0003
33
+ GR1000─GR1001┬GR1001X
34
+        └GR1001Y
35
+ ```
36
+ これから、GR0000配下にあるグループID を取得するには、下記のSQLになります。
37
+
38
+ ```SQL
39
+ SELECT DISTINCT parentid
40
+ FROM public_groupandpeople
41
+ WHERE parentid='GR0000'
42
+ UNUON ALL
43
+ SELECT childid
44
+ FROM public_groupandpeople
45
+ WHERE parentid="GR0000"
46
+ UNUON ALL
47
+ SELECT T1.childid
48
+ FROM public_groupandpeople T1 INNER JOIN public_groupandpeople T2
49
+ ON T1.parentid = T2.childid
50
+ WHERE T2.parentid="GR0000";
51
+ ```
52
+ ルート階層のデータ
53
+ UNION ALL
54
+ 1階層下のデータ
55
+ UNION ALL
56
+ 2階層下のデータ;
57
+
58
+ という構成になっています。
59
+
60
+ このSQLをクエリとして保存します。名前はQ1とします。
61
+
62
+ ```SQL
63
+ SELECT Q1.parentid, T1.group_name
64
+ FROM Q1 INNER JOIN public_groups T1 ON Q1.parentid = T1.group_id;
65
+ ```
66
+ 出力結果
67
+ ```
68
+ parentid group_name
69
+ ---------------------
70
+ GR0000 グループA
71
+ GR0001 グループB
72
+ GR0002 グループC
73
+ GR0003 グループD
74
+ GR0001X グループE
75
+ GR0001Y グループF
76
+ GR0002X グループG
77
+ ```
78
+ GR0000配下のグループデータが出力されます。
79
+
80
+ Q1をサブクエリにすれば一つのクエリに纏められます。
81
+
82
+ SQLで階層モデルを表現するのは難しいです。現状のテーブル設計が最適とはいえないかもしれません。下記辺りを参考にして設計を再考するのもいいかもしれません。
83
+
84
+ [階層構造データへの挑戦 - Qiita](http://qiita.com/uchinami_shoichi/items/5fa52f340003107d46c1)
85
+ [Fertile Forest Model (ツリー構造データをRDBで扱うための第五のモデル) - Qiita](http://qiita.com/StewEucen/items/e0487c39285a9d6b7863)
86
+