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

回答編集履歴

1

回答を最初に記載

2021/05/26 02:00

投稿

Yoshi88
Yoshi88

スコア623

answer CHANGED
@@ -1,7 +1,28 @@
1
+ > 以下SQL003のようにサブクエリで指定すると期待する結果が得られました。
2
+ > しかし、selectが2回あるのであまり効率が良いSQLとは思えないです。
3
+ > りんご、バナナの他に検索対象の数が増えた場合、増えた数に比例してサブクエリを増やす必要があるはずです。
4
+
5
+ 抽出条件が変化することも想定する場合は、SQL 文で記述する場合と、
6
+ 「別途、Where 条件が記録されたワークテーブルを用意」しておき、テーブル結合を利用する。
7
+ という場合もあります。
8
+
9
+ 例えば、いろんな組み合わせが想定されるかと思います。
10
+
11
+ ・バナナだけ条件にしたい(りんご に関するデータは不要)
12
+ ・バナナは 2個以下、リンゴは 5個以上
13
+
14
+ また、データベース管理アプリケーションによっては、内部的に変数を持たせて処理できるものもあります。効率という観点からは、そのようなアプリケーションに特化した形を採用する場合もあります。
15
+
16
+
17
+
18
+ ただ、今回の場合、SQL001 の判断が間違っているので、その間違いに気づかず、あれこれ試行錯誤して袋小路に入り込んでしまっているようすがうかがえます。
19
+
20
+ まずは、基本的な SQL を理解してから、次の疑問を解決するほうがよさそうですよ。
21
+
22
+
1
23
  > 以下SQL001は結果が0件です。
2
24
  > りんごが2個以上のwhere条件で既に結果にバナナが含まれていない為、2つめのバナナに関するwhere条件を満たせず0件になったと思われます。
3
25
 
4
- この判断が間違っているのですが、その間違いに気づかず、あれこれ試行錯誤して袋小路に入り込んでしまっているようです。
5
26
 
6
27
  ```ここに言語を入力
7
28
  where
@@ -25,14 +46,10 @@
25
46
  という条件の成立を期待していることになります。
26
47
 
27
48
 
28
- name の中に同時に2つの異なる値が存在することはあり得ませんので、
49
+ つまり、 name の中に同時に2つの異なる値が存在することはあり得ませんので、
29
50
  本来の意図と異なり、結果が どんな場合でも 0件 になってしまいます
30
51
 
31
52
 
32
53
 
33
54
 
34
- SQL は (C やスクリプト系言語のような)手続き型言語ではなく、集合指向の言語であるため、手順で考えるのではなく、集合体の操作へと、発想を変える必要があります。
55
+ SQL は (C やスクリプト系言語のような)手続き型言語ではなく、集合指向の言語であるため、手順で考えるのではなく、集合体の操作へと、発想を変える必要がありますので、頑張ってください
35
-
36
- 発想の転換は、慣れないうちは大変かと思います
37
-
38
- まずは、SQL001 がどうして意図した結果ではなかったのか理解を深めることで、サブクエリの必要性や効果も理解できるようになると思います。