回答編集履歴

2

動作を追加

2017/10/25 03:04

投稿

tacsheaven
tacsheaven

スコア13703

test CHANGED
@@ -46,12 +46,22 @@
46
46
 
47
47
  ```SQL
48
48
 
49
- SELECT 項目A FROM テーブルA WHERE 項目B = '赤')
49
+ SELECT DISTINCT 項目A FROM テーブルA WHERE 項目B = '赤')
50
50
 
51
51
  EXCEPT
52
52
 
53
- SELECT 項目A FROM テーブルA WHERE 項目B <> '赤')
53
+ SELECT DISTINCT 項目A FROM テーブルA WHERE 項目B <> '赤')
54
54
 
55
55
  ```
56
56
 
57
57
  でいけそうです。
58
+
59
+ ※それぞれの SELECT の結果が、
60
+
61
+ {100, 200, 300, 400}
62
+
63
+ {100, 400}
64
+
65
+ となるので、差集合は
66
+
67
+ {200, 300}

1

質問意図が分かったので回答追加

2017/10/25 03:04

投稿

tacsheaven
tacsheaven

スコア13703

test CHANGED
@@ -27,3 +27,31 @@
27
27
 
28
28
 
29
29
  あるいは項目Bが複数の値をとれる構造になっていて、その中に「赤」が含まれていて「青」も「黄」も含まれていないなら取り出す、なのでしょうか?
30
+
31
+
32
+
33
+ ---
34
+
35
+ 質問意図がようやくわかったので追加
36
+
37
+
38
+
39
+ 項目Aでグループ化した場合に、その中に「赤」しか含まないもの、を抽出するということなので、
40
+
41
+ ・項目Bが「赤」であるもの (A)
42
+
43
+ ・項目Bが「赤でないもの」 (nA)
44
+
45
+ それぞれの項目Aを出し、A にあって、かつ nA にないもの、すなわち、A と nA の差集合をとればよいことになります。
46
+
47
+ ```SQL
48
+
49
+ SELECT 項目A FROM テーブルA WHERE 項目B = '赤')
50
+
51
+ EXCEPT
52
+
53
+ SELECT 項目A FROM テーブルA WHERE 項目B <> '赤')
54
+
55
+ ```
56
+
57
+ でいけそうです。