PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SQL: Ich bekomme den Join nicht hin


AtTheDriveIn
2008-02-24, 00:22:47
Ich tue mich gerade schwer einen bestimmeten Join zu erstellen, ich hoffe ihr könnt mir helfen:

Erstmal die Tabellen

Tabelle Student
Matnr

Tabelle Praktikum
Praktikumkey

Tabelle Gruppe
Gruppenkey
PPraktikum Foreign references Praktikum.Praktikumkey

Tabelle Belegung
PMatnr Foreign references Student.Matnr
Pgruppenkey Foreign references Gruppe.Gruppenkey

Tabelle Projekt
Projektkey
PPraktikumkey Foreign references Praktikum.Praktikumkey

Tabelle Projektvergabe
PProjektkey Foreign references Projekt.Projektkey
PMatnr Foreign references Student.PMatnr

In Belegung ist die Gruppeneinteilung gespeichert. Ein Student kann in mehreren Gruppen(d.h. mehreren Praktika seien), taucht also öfter in der Tabelle auf. Ein Praktikum besitzt Projekte und besteht aus mehreren Gruppen. Ein Student kann in jedem seiner Praktika ein Projekt bekommen, das wird dann in Projektvergabe gespeichert, er kann dort also auch mehrmals auftauchen.

So... :)

Was ich nun brauche und nicht hinbekomme ist ein Join in dem zu jedem Studenten in Belegung sein Projekt angezeigt wird, das Feld kann aber auch leer sein, eben dann wenn er noch kein Projekt hat.
Wenn ein Student in zwei Praktika jeweils ein Projekt hat, soll er auch 2x in dem Join auftauchen, bzw. wenn er nur in einem der beiden Praktika bisher ein Projekt hat, ebenfalls 2x, einmal mit dem einen Projekt, einmal ohne.

Ich hoffe ihr versteht mich.

MooN
2008-02-24, 01:46:23
Also ich würde einfach mal über alles nen INNER JOIN ziehen, davon eben Student und Projekt anzeigen und dann noch eventuell GROUP BY Matnr

EDIT:
toll, vielleicht hätte ich mal weiterlesen sollen.. du hast ja bereits eine Tabelle in der die Studenten den Projekten zugewiesen sind
Wenn du nichts weiteres willst, als alle Studenten mit ihren jeweiligen Projekten, dann sollte das damit gehen:

SELECT s.Name, p.Projektbezeichnung
FROM Student AS s
INNER JOIN Projektvergabe AS pv ON s.Matnr = pv.PMatnr
INNER JOIN Projekt AS p ON p.Projektkey = pv.PProjektkey
ORDER BY s.Student ASC;

Vorausgesetzt es gibt in der Tabelle Student eine Spalte "Name" für die (Nach-)Namen der Studenten und in der Tabelle Projekt ein Feld mit der Projektbezeichnung (die du ja ausgegeben haben willst).

AtTheDriveIn
2008-02-24, 02:33:10
ja das klappt soweit (nur die AS müßen raus), danke :) Aber ich brauch auch die Studenten in einem Praktikum ohne Projekt.

Ich habe mir jetzt mit einem View geholfen, den ich in den Join einbaue, das klappt jetzt soweit. Ist das eigentlich guter Stil mit Views innerhalb von Joins zu arbeiten? Wahrscheinlich geht es auch ohne den View, aber so war für mich die Sache überschaubarer...

MooN
2008-02-24, 12:09:46
Versuchs mal damit
SELECT s.Name, p.Projektbezeichnung
FROM Student AS s
LEFT JOIN Projektvergabe AS pv ON s.Matnr = pv.PMatnr
INNER JOIN Projekt AS p ON p.Projektkey = pv.PProjektkey
ORDER BY s.Student ASC;


Mit nem LEFT JOIN sollte das gehen (bzw RIGHT JOIN, je nachdem wie das Statement aussieht).