回答編集履歴

1

回答を修正

2017/10/03 05:05

投稿

退会済みユーザー
test CHANGED
@@ -21,3 +21,57 @@
21
21
  WHERE AB1.A_id = AB2.A_id AND AB1.A_id = 1;
22
22
 
23
23
  ```
24
+
25
+ ---
26
+
27
+ 追記:
28
+
29
+ せっかく具体例をご提示いただいたのですが、上手な方法は思いつきませんでした。
30
+
31
+ 後々のことを考えると列を増やすのは確かに得策ではないと感じましたので
32
+
33
+ もともとのデータ構造で実現するとしたら、ということで下記のように考えてみました。
34
+
35
+ もしかしたら、組み合わせの列挙方法がご想定のものとは異なるかもものになっているかもしれません。
36
+
37
+
38
+
39
+ ```SQL
40
+
41
+ SELECT BC1.c_id FROM BC BC1
42
+
43
+ INNER JOIN BC BC2 ON BC1.C_id = BC2.C_id AND BC1.B_id < BC2.B_id
44
+
45
+ LEFT JOIN BC BC3 ON BC1.C_id = BC3.C_id AND BC2.B_id < BC3.B_id
46
+
47
+ INNER JOIN AB AB1 ON BC1.B_id = AB1.B_id
48
+
49
+ INNER JOIN AB AB2 ON BC2.B_id = AB2.B_id
50
+
51
+ LEFT JOIN AB AB3 ON BC3.B_id = AB3.B_id
52
+
53
+ WHERE (BC3.c_id IS NOT NULL OR BC1.c_id NOT IN (
54
+
55
+ SELECT BC1.c_id FROM BC BC1
56
+
57
+ INNER JOIN BC BC2 ON BC1.C_id = BC2.C_id AND BC1.B_id < BC2.B_id
58
+
59
+ INNER JOIN BC BC3 ON BC1.C_id = BC3.C_id AND BC2.B_id < BC3.B_id
60
+
61
+ ))
62
+
63
+ AND AB1.A_id = AB2.A_id
64
+
65
+ AND
66
+
67
+ (
68
+
69
+ (BC3.B_id IS NOT NULL AND AB3.B_id IS NOT NULL AND AB1.A_id = AB3.A_id)
70
+
71
+ OR (BC3.B_id IS NULL AND AB3.B_id IS NULL)
72
+
73
+ )
74
+
75
+ AND AB1.A_id = 1;
76
+
77
+ ```