2016-11-22 15 views
0

Wie konvertiert man eine Join-Abfrage in eine verschachtelte Abfrage (mit "where in" -Bedingung)? für zB wie man dies in eine verschachtelte Abfrage umwandelt?Abfrage in verschachtelte Abfrage konvertieren

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

Ich denke, ein Doppel-Join benötigt möglicherweise eine doppelt verschachtelte 'WHERE'-Klausel (gelesen: wirklich hässlich). Warum sollten Sie dies tun, es sei denn, Sie verwenden etwas wie JPA, die dieses Format aus irgendeinem Grund erfordert? –

+0

@TimBiegeleisen, ist es möglich, verschachtelte Abfragen mit 3 Tabellen zu haben? Was ist die Syntax davon? – Siraj

+0

@TimBiegeleisen können Sie bitte näher auf die doppelte Schachtelung eingehen, die Sie erwähnt haben – Siraj

Antwort

0

Dies wird als NLJ ("Nested Loop Join") ausgewertet.

  1. Suchen Sie in student, Filterung auf usn = '...'.
  2. Für jede solche Zeile (wahrscheinlich in diesem Fall), tun NLJ in attendance, um alle und alle Zeilen zu finden, die die ON gegeben erfüllen. Dies führt zu einer längeren (oder kürzeren) Liste von Zeilen.
  3. Führen Sie für jede der Zeilen in # 2 NLJ in schedule basierend auf ON. Jetzt gibt es eine Reihe von Zeilen ...
  4. Tun Sie die GROUP BY und ORDER BY (diese können gleichzeitig durchgeführt werden, da sie identisch sind). Dies liefert nicht mehr Zeilen als was # 3 gab. (GROUP BY kann nie die Anzahl der Zeilen erhöhen.)

Sie nicht die Abfrage in WHERE x IN (SELECT ...) verkabeln, dass es in der Regel langsamer laufen lassen.