回答編集履歴

3

追記

2019/04/29 02:02

投稿

sazi
sazi

スコア25173

test CHANGED
@@ -78,6 +78,18 @@
78
78
 
79
79
  --
80
80
 
81
+ > 皆さんの回答を見て、勘違いされているようなので追記します。
82
+
83
+
84
+
85
+ 「サブクエリでおおもとのクエリのエイリアスを使った時のエラーを説明して下さい。」
86
+
87
+ タイトルが、勘違いの元です。
88
+
89
+ そもそも、p.というのはエイリアスではなくて修飾子と言います。
90
+
91
+
92
+
81
93
  > 内部でどのような処理が行われて、サブクエリでどのようなテーブルが呼び出されたのでしょうか。
82
94
 
83
95
 

2

追記

2019/04/29 02:02

投稿

sazi
sazi

スコア25173

test CHANGED
@@ -71,3 +71,23 @@
71
71
  )
72
72
 
73
73
  ```
74
+
75
+
76
+
77
+ 追記2
78
+
79
+ --
80
+
81
+ > 内部でどのような処理が行われて、サブクエリでどのようなテーブルが呼び出されたのでしょうか。
82
+
83
+
84
+
85
+ サブクエリー内でfrom句に記述されたテーブル等を参照するものを、相関サブクエリー(相関副問合せ)と云います。
86
+
87
+
88
+
89
+ 相関副問合せでは、参照される側(fromにある記述)が先実行されてから、参照する側が実行されます。
90
+
91
+ 参照される側1件に対して都度実行されるのが基本です。
92
+
93
+ オプチマイザや内容によって事前に抽出が行われる事もあるでしょうし、どのような実行順序となっているかは、実行計画で確認する方が良いでしょう。

1

追記

2019/04/29 01:55

投稿

sazi
sazi

スコア25173

test CHANGED
@@ -35,3 +35,39 @@
35
35
  ```
36
36
 
37
37
  但し、それはサブクエリーが`positionNo`を1パターンしか返さない場合だけです。
38
+
39
+
40
+
41
+ 追記
42
+
43
+ ---
44
+
45
+ > やろうとしたことはチーム番号2、背番号5の人と同じポジションの人のチーム名、ポジション名、背番号、選手名を取得することです。
46
+
47
+
48
+
49
+ それなら、サブクエリーが相関になっているのはおかしいです。
50
+
51
+ 以下なら`=`でもエラーにならないと思います。
52
+
53
+ ```SQL
54
+
55
+ select teamName , positionName ,uniformNo ,playerName
56
+
57
+ from player p
58
+
59
+ join team using(teamNo)
60
+
61
+ join position1 using(PositionNo)
62
+
63
+ where positionNo =(
64
+
65
+ select positionNo
66
+
67
+ from player
68
+
69
+ where teamNo = 2 and uniformNo=5
70
+
71
+ )
72
+
73
+ ```