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

回答編集履歴

1

回答を修正

2017/10/03 05:05

投稿

退会済みユーザー
answer CHANGED
@@ -9,4 +9,31 @@
9
9
  INNER JOIN AB AB1 ON BC.B_id1 = AB1.B_id
10
10
  INNER JOIN AB AB2 ON BC.b_id2 = AB2.b_id
11
11
  WHERE AB1.A_id = AB2.A_id AND AB1.A_id = 1;
12
+ ```
13
+ ---
14
+ 追記:
15
+ せっかく具体例をご提示いただいたのですが、上手な方法は思いつきませんでした。
16
+ 後々のことを考えると列を増やすのは確かに得策ではないと感じましたので
17
+ もともとのデータ構造で実現するとしたら、ということで下記のように考えてみました。
18
+ もしかしたら、組み合わせの列挙方法がご想定のものとは異なるかもものになっているかもしれません。
19
+
20
+ ```SQL
21
+ SELECT BC1.c_id FROM BC BC1
22
+ INNER JOIN BC BC2 ON BC1.C_id = BC2.C_id AND BC1.B_id < BC2.B_id
23
+ LEFT JOIN BC BC3 ON BC1.C_id = BC3.C_id AND BC2.B_id < BC3.B_id
24
+ INNER JOIN AB AB1 ON BC1.B_id = AB1.B_id
25
+ INNER JOIN AB AB2 ON BC2.B_id = AB2.B_id
26
+ LEFT JOIN AB AB3 ON BC3.B_id = AB3.B_id
27
+ WHERE (BC3.c_id IS NOT NULL OR BC1.c_id NOT IN (
28
+ SELECT BC1.c_id FROM BC BC1
29
+ INNER JOIN BC BC2 ON BC1.C_id = BC2.C_id AND BC1.B_id < BC2.B_id
30
+ INNER JOIN BC BC3 ON BC1.C_id = BC3.C_id AND BC2.B_id < BC3.B_id
31
+ ))
32
+ AND AB1.A_id = AB2.A_id
33
+ AND
34
+ (
35
+ (BC3.B_id IS NOT NULL AND AB3.B_id IS NOT NULL AND AB1.A_id = AB3.A_id)
36
+ OR (BC3.B_id IS NULL AND AB3.B_id IS NULL)
37
+ )
38
+ AND AB1.A_id = 1;
12
39
  ```