回答編集履歴

4

訂正

2021/05/26 03:02

投稿

sazi
sazi

スコア25197

test CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
  from items i
16
16
 
17
- left join (
17
+ full join (
18
18
 
19
19
  select 'りんご' as name, 2 as num
20
20
 
@@ -40,7 +40,7 @@
40
40
 
41
41
  from items i
42
42
 
43
- left join condition c
43
+ full join condition c
44
44
 
45
45
  on i.name = c.name and i.num >= c.num
46
46
 

3

追記

2021/05/26 03:01

投稿

sazi
sazi

スコア25197

test CHANGED
@@ -20,14 +20,32 @@
20
20
 
21
21
  union all select 'バナナ', 2
22
22
 
23
- ) p
23
+ ) c
24
24
 
25
- on i.name=p.name and i.num >= p.num
25
+ on i.name = c.name and i.num >= c.num
26
26
 
27
27
  group by user_id
28
28
 
29
- having count(i.name)=count(p.name)
29
+ having count(i.name)=count(c.name)
30
30
 
31
31
  ```
32
32
 
33
33
  条件が多いようなら、条件用の一時テーブルを使用する方が簡潔になると思います。
34
+
35
+ 条件を一時テーブルconditionとした場合
36
+
37
+ ```SQL
38
+
39
+ select user_id
40
+
41
+ from items i
42
+
43
+ left join condition c
44
+
45
+ on i.name = c.name and i.num >= c.num
46
+
47
+ group by user_id
48
+
49
+ having count(i.name)=count(c.name)
50
+
51
+ ```

2

訂正

2021/05/26 02:59

投稿

sazi
sazi

スコア25197

test CHANGED
@@ -3,3 +3,31 @@
3
3
 
4
4
 
5
5
  必ずしもそうだとは限りません。実行計画で確認すべきものです。
6
+
7
+
8
+
9
+ 条件を表にして**不等結合**するパターン。
10
+
11
+ ```SQL
12
+
13
+ select user_id
14
+
15
+ from items i
16
+
17
+ left join (
18
+
19
+ select 'りんご' as name, 2 as num
20
+
21
+ union all select 'バナナ', 2
22
+
23
+ ) p
24
+
25
+ on i.name=p.name and i.num >= p.num
26
+
27
+ group by user_id
28
+
29
+ having count(i.name)=count(p.name)
30
+
31
+ ```
32
+
33
+ 条件が多いようなら、条件用の一時テーブルを使用する方が簡潔になると思います。

1

訂正中

2021/05/26 02:55

投稿

sazi
sazi

スコア25197

test CHANGED
@@ -3,27 +3,3 @@
3
3
 
4
4
 
5
5
  必ずしもそうだとは限りません。実行計画で確認すべきものです。
6
-
7
-
8
-
9
- 条件を表にして**不等結合**するパターン。
10
-
11
- ```SQL
12
-
13
- select distinct user_id
14
-
15
- from items i
16
-
17
- inner join (
18
-
19
- select 'りんご' as name, 2 as num
20
-
21
- union all select 'バナナ', 2
22
-
23
- ) p
24
-
25
- on i.name=p.name and i.num >= p.num
26
-
27
- ```
28
-
29
- 条件が多いようなら、条件用の一時テーブルを使用する方が簡潔になると思います。