2016-11-22 8 views
0

ジョインクエリーをネストされたクエリーに変換するにはどうすればいいですか? たとえば、これを入れ子になったクエリに変換する方法はありますか?クエリーをネストされたクエリーに変換する

SELECT student.studentname, 
     schedule.subcode, 
     AVG(attendance.ispresent)*100 AS Attendance_Status 
FROM student 
JOIN attendance 
    ON student.usn = attendance.usn 
JOIN schedule 
    ON schedule.sched_id = attendance.sched_id 
WHERE student.usn="4jc14is008" 
GROUP BY schedule.subcode 
ORDER BY schedule.subcode; 
+2

二重結合には二重に入れ子になった 'WHERE'節が必要かもしれないと思います(本当に醜いです)。何らかの理由でJPAのようなフォーマットを必要とするものを使用していない限り、なぜこれを行う必要がありますか? –

+0

@TimBiegeleisen、3つのテーブルを含むネストされたクエリを持つことは可能ですか?それの構文は何ですか? – Siraj

+0

@TimBiegeleisenあなたが言及した二重のネスティングについて詳しく述べてください – Siraj

答えて

0

これは、NLJ(「ネストループ結合」)として評価されます。

  1. studentを参照してください。usn = '...'でフィルタリングしてください。
  2. NLJをattendanceに設定し、ONを満たすすべての行を検索します(この場合はおそらく1つ)。これにより、より長い(または短い)行のリストが作成されます。
  3. #2の各行に対して、NLJをscheduleに基づいてONに設定します。今すぐ行のセットがあります...
  4. GROUP BYORDER BYを実行します(これらは同じであるため同時に実行できます)。これは#3が与えた行以上の行を提供しません。 (GROUP BYは、行の数を増やすことはできません。)

ないは通常、それが遅く実行させることを、WHERE x IN (SELECT ...)にクエリを再配線してください。

関連する問題