質問編集履歴

2

具体的なテーブルを追記しました。

2017/10/03 02:37

投稿

acre_maker
acre_maker

スコア145

test CHANGED
File without changes
test CHANGED
@@ -219,3 +219,33 @@
219
219
  ###補足情報
220
220
 
221
221
  PostgreSQL (version9.5.7)
222
+
223
+
224
+
225
+ ###追記
226
+
227
+ 専門的なことをしているので、抽象的に書いたほうがわかりやすいと思いましたが、
228
+
229
+ かえってわかりにくいという印象を与えてしまったようなので、
230
+
231
+ 具体的なテーブルも下に書いておきます。
232
+
233
+
234
+
235
+ 化学構造のデータを扱っていまして
236
+
237
+
238
+
239
+ A: 化学構造を含むライブラリ(データベース)名
240
+
241
+ B: 化学構造自体のレコード
242
+
243
+ AB: 複数のライブラリが同じ化学構造を含むことがあるためこのような形でリレーション
244
+
245
+ C: Bの化学構造のうちの2あるいは3個を組み合わせた新規の化学構造
246
+
247
+ BC: Cの新規の化学構造のために組み合わせたBの化学構造
248
+
249
+
250
+
251
+ となっております。

1

レコード増やしてSQL文を追記しました。

2017/10/03 02:37

投稿

acre_maker
acre_maker

スコア145

test CHANGED
File without changes
test CHANGED
@@ -34,9 +34,55 @@
34
34
 
35
35
 
36
36
 
37
+ **追記**
38
+
39
+ 例えば以下の例では
40
+
41
+
42
+
43
+ A_id=1に関しては、Table CのC_id=500, 501, 502の3つを検索ヒットし
44
+
45
+ C_id=503, 504は検索ヒットしたくありません。
46
+
47
+ (A_id=1はB_id=33, 34とリレーションがないため)
48
+
49
+
50
+
51
+ A_id=2に関しては、Table CのC_id=500の1つを検索ヒットし
52
+
53
+ C_id=501, 502, 503, 504は検索ヒットしたくありません。
54
+
55
+ (A_id=2はB_id=32, 33, 34とリレーションがないため)
56
+
57
+
58
+
59
+ A_id=3に関しては、Table CのC_id=503, 504, 505の3つを検索ヒットし
60
+
61
+ C_id=500, 502は検索ヒットしたくありません。
62
+
63
+ (A_id=3はB_id=30, 32とリレーションがないため)
64
+
65
+
66
+
37
67
  ###発生している問題・エラーメッセージ
38
68
 
69
+ **追記**
70
+
71
+ 単純に中間テーブルを用いたSQL文を以下のように考えました。
72
+
73
+ ```sql
74
+
75
+ SELECT COUNT(DISTINCT(C_id)) FROM BC WHERE B_id in (
76
+
77
+ SELECT B_id FROM AB WHERE A_id = 1
78
+
79
+ )
80
+
81
+ ```
82
+
83
+
84
+
39
- 自分で考えたSQL文では
85
+ しかし、この自分で考えたSQL文では
40
86
 
41
87
  以下のようなリレーションがある時、A_id=2を満たすBのB_idを取得して、
42
88
 
@@ -62,6 +108,8 @@
62
108
 
63
109
  |2|baz|
64
110
 
111
+ |3|bar|
112
+
65
113
 
66
114
 
67
115
  Table B
@@ -76,6 +124,10 @@
76
124
 
77
125
  |32|-3|
78
126
 
127
+ |33|-4|
128
+
129
+ |34|-5|
130
+
79
131
 
80
132
 
81
133
  Table AB
@@ -94,6 +146,12 @@
94
146
 
95
147
  |2|31|
96
148
 
149
+ |3|31|
150
+
151
+ |3|33|
152
+
153
+ |3|34|
154
+
97
155
 
98
156
 
99
157
  Table C
@@ -108,6 +166,12 @@
108
166
 
109
167
  |502|Chris|
110
168
 
169
+ |503|Dylan|
170
+
171
+ |504|Emily|
172
+
173
+ |505|Franc|
174
+
111
175
 
112
176
 
113
177
  Table BC
@@ -128,6 +192,18 @@
128
192
 
129
193
  |32|502|
130
194
 
195
+ |31|503|
196
+
197
+ |33|503|
198
+
199
+ |31|504|
200
+
201
+ |34|504|
202
+
203
+ |33|505|
204
+
205
+ |34|505|
206
+
131
207
 
132
208
 
133
209
  どのようにすれば、私が望むように検索ヒットすることができるでしょうか?