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

回答編集履歴

4

訂正

2021/05/26 03:02

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -6,7 +6,7 @@
6
6
  ```SQL
7
7
  select user_id
8
8
  from items i
9
- left join (
9
+ full join (
10
10
  select 'りんご' as name, 2 as num
11
11
  union all select 'バナナ', 2
12
12
  ) c
@@ -19,7 +19,7 @@
19
19
  ```SQL
20
20
  select user_id
21
21
  from items i
22
- left join condition c
22
+ full join condition c
23
23
  on i.name = c.name and i.num >= c.num
24
24
  group by user_id
25
25
  having count(i.name)=count(c.name)

3

追記

2021/05/26 03:01

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -9,9 +9,18 @@
9
9
  left join (
10
10
  select 'りんご' as name, 2 as num
11
11
  union all select 'バナナ', 2
12
- ) p
12
+ ) c
13
- on i.name=p.name and i.num >= p.num
13
+ on i.name = c.name and i.num >= c.num
14
14
  group by user_id
15
- having count(i.name)=count(p.name)
15
+ having count(i.name)=count(c.name)
16
16
  ```
17
- 条件が多いようなら、条件用の一時テーブルを使用する方が簡潔になると思います。
17
+ 条件が多いようなら、条件用の一時テーブルを使用する方が簡潔になると思います。
18
+ 条件を一時テーブルconditionとした場合
19
+ ```SQL
20
+ select user_id
21
+ from items i
22
+ left join condition c
23
+ on i.name = c.name and i.num >= c.num
24
+ group by user_id
25
+ having count(i.name)=count(c.name)
26
+ ```

2

訂正

2021/05/26 02:59

投稿

sazi
sazi

スコア25430

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

1

訂正中

2021/05/26 02:55

投稿

sazi
sazi

スコア25430

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