回答編集履歴
4
訂正
answer
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
```SQL
|
7
7
|
select user_id
|
8
8
|
from items i
|
9
|
-
|
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
|
-
|
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
追記
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
|
-
)
|
12
|
+
) c
|
13
|
-
on i.name=
|
13
|
+
on i.name = c.name and i.num >= c.num
|
14
14
|
group by user_id
|
15
|
-
having count(i.name)=count(
|
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
訂正
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
訂正中
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
|
-
条件が多いようなら、条件用の一時テーブルを使用する方が簡潔になると思います。
|