質問編集履歴
2
具体的なテーブルを追記しました。
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文を追記しました。
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
|
どのようにすれば、私が望むように検索ヒットすることができるでしょうか?
|