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

回答編集履歴

3

追記

2019/04/29 02:02

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -38,6 +38,12 @@
38
38
 
39
39
  追記2
40
40
  --
41
+ > 皆さんの回答を見て、勘違いされているようなので追記します。
42
+
43
+ 「サブクエリでおおもとのクエリのエイリアスを使った時のエラーを説明して下さい。」
44
+ タイトルが、勘違いの元です。
45
+ そもそも、p.というのはエイリアスではなくて修飾子と言います。
46
+
41
47
  > 内部でどのような処理が行われて、サブクエリでどのようなテーブルが呼び出されたのでしょうか。
42
48
 
43
49
  サブクエリー内でfrom句に記述されたテーブル等を参照するものを、相関サブクエリー(相関副問合せ)と云います。

2

追記

2019/04/29 02:02

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -34,4 +34,14 @@
34
34
  from player
35
35
  where teamNo = 2 and uniformNo=5
36
36
  )
37
- ```
37
+ ```
38
+
39
+ 追記2
40
+ --
41
+ > 内部でどのような処理が行われて、サブクエリでどのようなテーブルが呼び出されたのでしょうか。
42
+
43
+ サブクエリー内でfrom句に記述されたテーブル等を参照するものを、相関サブクエリー(相関副問合せ)と云います。
44
+
45
+ 相関副問合せでは、参照される側(fromにある記述)が先実行されてから、参照する側が実行されます。
46
+ 参照される側1件に対して都度実行されるのが基本です。
47
+ オプチマイザや内容によって事前に抽出が行われる事もあるでしょうし、どのような実行順序となっているかは、実行計画で確認する方が良いでしょう。

1

追記

2019/04/29 01:55

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -16,4 +16,22 @@
16
16
  where p.teamNo = 2 and p.uniformNo=5
17
17
  )
18
18
  ```
19
- 但し、それはサブクエリーが`positionNo`を1パターンしか返さない場合だけです。
19
+ 但し、それはサブクエリーが`positionNo`を1パターンしか返さない場合だけです。
20
+
21
+ 追記
22
+ ---
23
+ > やろうとしたことはチーム番号2、背番号5の人と同じポジションの人のチーム名、ポジション名、背番号、選手名を取得することです。
24
+
25
+ それなら、サブクエリーが相関になっているのはおかしいです。
26
+ 以下なら`=`でもエラーにならないと思います。
27
+ ```SQL
28
+ select teamName , positionName ,uniformNo ,playerName
29
+ from player p
30
+ join team using(teamNo)
31
+ join position1 using(PositionNo)
32
+ where positionNo =(
33
+ select positionNo
34
+ from player
35
+ where teamNo = 2 and uniformNo=5
36
+ )
37
+ ```