sql
1select teamName , positionName ,uniformNo ,playerName 2from player p 3join team using(teamNo) 4join position1 using(PositionNo) 5where positionNo = 6( 7 select positionNo 8from player 9where p.teamNo = 2 and p.uniformNo=5 10);
上記のクエリを実行すると、サブクエリの結果が2つ以上ありますとでました。
そこで、5行目の=をinに変えたところ結果はサブクエリでの条件がおおもとのクエリの条件になった場合(下のコード)と一致しました。
内部でどのような処理が行われて、サブクエリでどのようなテーブルが呼び出されたのでしょうか。
自分の予想では、サブクエリで呼び出されたテーブルはplayerそのものとおおもとのクエリでjoinしたplayerテーブルを下のwhere句で絞ったものが
呼び出されて、playerテーブルにはteamNameとpositionNameのカラムがないのでjoinされたテーブルのみ該当してinにしたとき、playerテーブルのみと一致したものは除外されたと考えたのですが、そうするとinにしたときの結果が1件なのが説明できません。
sql
1select teamName , positionName ,uniformNo ,playerName 2from player p 3join team using(teamNo) 4join position1 using(PositionNo) 5where p.teamNo = 2 and p.uniformNo=5;
playerにはteamNo,positionNo,uniformNo,playerName 、
teamには teamNo , teamName 、
position1には positionNo, positionName のカラムがあります。
追記
SQL
1CREATE TABLE Position1( 2 SportNo VARCHAR(2) NOT NULL, 3 PositionNo VARCHAR(2) NOT NULL, 4 PositionName VARCHAR(20) NOT NULL, 5 PRIMARY KEY(SportNo,PositionNo)) CHARSET=SJIS; 6CREATE TABLE Player( 7 TeamNo VARCHAR(2) NOT NULL, 8 PositionNo VARCHAR(2) NOT NULL, 9 UniformNo VARCHAR(2) NOT NULL, 10 BirthDay DATE NOT NULL, 11 PlayerName VARCHAR(20) NOT NULL, 12 PRIMARY KEY(TeamNo,UniformNo)) CHARSET=SJIS; 13CREATE TABLE Team( 14 SportNo VARCHAR(2) NOT NULL, 15 LeagueNo VARCHAR(2) NOT NULL, 16 AreaNo VARCHAR(2) NOT NULL, 17 TeamNo VARCHAR(2) NOT NULL, 18 TeamName VARCHAR(50) NOT NULL, 19 PRIMEKEY(TeamNo)) CHARSET=SJIS; 20
やろうとしたことはチーム番号2、背番号5の人と同じポジションの人のチーム名、ポジション名、背番号、選手名を取得することです。
ちなみにこれは演習として作ったクエリです。
皆さんの回答を見て、勘違いされているようなので追記します。
私が知りたいのは「このクエリ文で呼びされたサブクエリの中身」から「クエリ文が実行されたときの内部処理の内容」であって、
エラーの直しかたではないです。サブクエリ文のエイリアスをとればいいのは分かってます。
質問は
内部でどのような処理が行われて、サブクエリでどのようなテーブルが呼び出されたのでしょうか。
ですから。
このエラーの直し方を教えてください
ではないです。
回答3件
あなたの回答
tips
プレビュー