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

回答編集履歴

3

推敲

2021/02/24 01:52

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -15,6 +15,7 @@
15
15
  from テーブル t1 left join (
16
16
  select 氏名, 教科ID from テーブル
17
17
  where 合否=0
18
+ group by 氏名, 教科ID
18
19
  ) t2
19
20
  on t2.氏名=t1.氏名 and t2.教科ID=t1.教科ID
20
21
  where t2.氏名 is null

2

追記

2021/02/24 01:52

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -8,4 +8,15 @@
8
8
  select 1 from テーブル t2
9
9
  where t2.氏名=t1.氏名 and t2.教科ID=t1.教科ID and t2.合否=0
10
10
  )
11
- ```
11
+ ```
12
+ **相関副問合せ**を使用しない場合は以下の様になります。
13
+ ```SQL
14
+ select t1.*
15
+ from テーブル t1 left join (
16
+ select 氏名, 教科ID from テーブル
17
+ where 合否=0
18
+ ) t2
19
+ on t2.氏名=t1.氏名 and t2.教科ID=t1.教科ID
20
+ where t2.氏名 is null
21
+ ```
22
+ SQLServerではこちらの方がコストは低いかもしれません。

1

推敲

2021/02/24 01:51

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -1,4 +1,4 @@
1
- > 教科(理科)内の科目(化学、物理、生物)内で一つでも不合格(0)な科目がある場合
1
+ > 教科(理科)内の科目(化学、物理、生物)内で一つでも不合格(0)な科目がある場合 その教科はSELECTしない
2
2
 
3
3
  このような場合は**相関副問合せ**の結果を**exists**で判断します。
4
4
  ```SQL