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

回答編集履歴

1

追記内容をもとに、回答を修正した。

2021/07/07 10:26

投稿

neko_the_shadow
neko_the_shadow

スコア2395

answer CHANGED
@@ -6,4 +6,33 @@
6
6
  JOIN 本 H2 ON H2.会社名 = 'BBB' AND H1.ジャンル = H2.ジャンル
7
7
  GROUP BY H1.会社名
8
8
  HAVING COUNT(*) = (SELECT COUNT(*) FROM 本 WHERE 会社名 = 'BBB')
9
+ ```
10
+
11
+ ---
12
+
13
+ **2021/07/07 19:23追記**
14
+
15
+ JOINを利用しない方法だと、例えば以下のようになります。
16
+
17
+ ```SQL
18
+ SELECT 会社名
19
+ FROM 本 H1
20
+ WHERE EXISTS (
21
+ SELECT *
22
+ FROM 本 H2
23
+ WHERE H2.会社名= 'BBB'
24
+ AND H1.ジャンル = H2.ジャンル
25
+ )
26
+ GROUP BY 会社名
27
+ HAVING COUNT(*) = (SELECT COUNT(*) FROM 本 WHERE 会社名 = 'BBB');
28
+ ```
29
+
30
+ ところで、タグにはMySQLとありますが、実際にはMS Accessを利用されているということはないでしょうか? であれば先に示したJOINを利用したクエリは以下のようにする必要があります。
31
+
32
+ ```SQL
33
+ SELECT H1.会社名
34
+ FROM 本 H1
35
+ INNER JOIN 本 H2 ON (H2.会社名 = 'BBB' AND H1.ジャンル = H2.ジャンル)
36
+ GROUP BY H1.会社名
37
+ HAVING COUNT(*) = (SELECT COUNT(*) FROM 本 WHERE 会社名 = 'BBB')
9
38
  ```