2016-04-13 13 views
0

ich ein Szenario wie dieses: ein Tisch course_details als unten:mit einer Oracle-SQL-Abfrage stecken

course_details

Nun, was ich suche die Details Studenten zu finden ist - in diesem Fall Stu_id - Wer hat in Kurse im Jahr 2016 eingeschrieben.

Sagen Sie zum Beispiel - für 2016 gibt es natürlich C1, C3 und C4. Von diesen Kursen hat sich nur S1 in allen eingeschrieben. S2 und S3 hat nur in einigen eingetragen.

Also meine Abfrage sollte nur das Ergebnis als S1 geben.

Ich habe versucht mit Unterabfrage Factoring, Fensterfunktionen, aber nicht in der Lage, es zu bekommen, ohne einige Werte hart-codieren.

+1

Gibt es eine Liste natürlich IDs in einer anderen Tabelle? Woher wissen wir, dass es kein 'C5' oder ein' C6' gibt? –

+0

Können Sie genauer angeben, nach welchen Details Sie suchen? – Barett

+0

Bitte zeigen Sie uns Code, den Sie ausprobiert haben und warum die Ergebnisse nicht Ihren Vorstellungen entsprechen. – Kateract

Antwort

0

Wie über die folgenden:

SELECT DISTINCT a.stu_id 
FROM course_details AS a 
WHERE 
    NOT EXISTS (
     SELECT NULL FROM course_details AS b 
     WHERE 
      b.enrol_dt = 2016 
      AND 
      NOT EXISTS (
       SELECT * FROM course_details AS c 
       WHERE c.c_id = b.c_id AND c.stu_id = a.stu_id 
      ) 
    );