回答編集履歴

1

HAVING句で書き直し(サブクエリだと遅いため)

2017/07/25 07:57

投稿

miyahan
miyahan

スコア3095

test CHANGED
@@ -1,21 +1,23 @@
1
+ ※HAVING句を使った方法に書き直し
2
+
3
+
4
+
1
5
  実現方法はいくつかありますが、たとえば del_flg がすべて 1 ということは、言い換えれば del_flg が 0 になっているレコードが1つもない product_id を検索すればよいので、
2
6
 
3
7
 
4
8
 
5
9
  ```sql
6
10
 
7
- SELECT product_id FROM dtb_products
11
+ SELECT product_id FROM dtb_products
8
12
 
9
- INNER JOIN dtb_products_class USING(product_id)
13
+ INNER JOIN dtb_products_class USING(product_id)
10
14
 
11
- WHERE product_id NOT IN
15
+ GROUP BY product_id
12
16
 
13
- (SELECT product_id FROM dtb_products_class WHERE del_flg = 0)
14
-
15
- GROUP BY product_id;
17
+ HAVING MIN(del_flg) = 1;
16
18
 
17
19
  ```
18
20
 
19
21
 
20
22
 
21
- という感じでサブクエリでdel_flg が 0 になっている product_id (=条件合わない product_id)を抽出し、そ外でそれを NOT IN除外すれば実現できます。
23
+ という感じで、 product_id における del_flg 最低値が 1 (=0が存在しない) という条件抽出してあげればよいと思います。