Entwickler-Ecke

Datenbanken - Problem mit einer Abfrage


Bronstein - Do 14.06.07 07:49
Titel: Problem mit einer Abfrage
Sorry für den Titel, mir ist aber keiner eingefallen, mit dem ich dieses Problem beschreiben kann

Ich habe zwei Tabellen. In der einen Tabelle stehen Beurteilungen und in der anderen die Beurteilungskriterien:
Tabelle Beurteilung hat folgende Felder:
KartenID, Kartename, KriteriumID, Text

Tabelle Beurteilungskriterien hat folgende Felder:
KriteriumID, Text

Die Tabellen sind also über die Spalte KriteriumID verknüpft.

Jetzt möchte ich herrausbekommen bei welcher Karte noch nicht alle Kriterien ausgefüllt sind.

Das Ergebnis sollte dann so aussehen:
KartenID, Kartenname, KriteriumID, Text (von Beurteilung)
1, Test, 1, sehr spannend
1, Test, 2,
1, Test, 3, lustig
2, Aussichtskarte, 1, ganz okay
2, Aussichtskarte, 2, ganz okay
2, Aussichtskarte, 3,

So sehe ich jetzt, dass bei der Karte 1 für die KriteriumID 2 keine Bewertung abgegeben wurde und bei der Karte 2 für das Kriterium 3 keine Bewertung abgegeben wurde.

Habe jetzt mal folgendes versucht:
SELECT KartenID, Kartename, Beurteilung.KriteriumID, Text FROM Beurteilung INNER JOIN Beurteilungskriterien ON Beurteilung.KriteriumID = tblProjekt.KriteriumID

Hier sehe ich nur die Kriterien bei denen was abgegeben wurden
Habe diese Abfrage auch mit Left Join und Right Join versucht, doch ich bekomme dasselbe Ergebnis


ene - Do 14.06.07 07:52

Hi,

ein LEFT JOIN mit einer Abfrage auf Is Null sollte das richtige Ergebniss prüfen, sonst müsste man es mit In (SELECT...) versuchen, was aber nicht performant ist und das LEFT JOIN zu bevorzugen ist.


ZeitGeist87 - Do 14.06.07 08:00

Oder man erstellt eine View :)


ene - Do 14.06.07 08:02

Oder du arbeitest mit VBA in einer Abfrage oder machst eine SP draus, aber auf welchem DBMS arbeiten wir denn? ;)


ZeitGeist87 - Do 14.06.07 08:08

Wenn ich mich richtig erinner, arbeitet Bronstein auf MySQL;


Bronstein - Do 14.06.07 08:21

@ene
SELECT Beurteilung.KartenID, Beurteilung.Kartename, Beurteilung.Text, Beurteilungskriterien.KriteriumID
FROM Beurteilung LEFT JOIN Beurteilungskriterien ON Beurteilung.KriteriumID = Beurteilungskriterien.KriteriumID
WHERE (((Beurteilungskriterien.KriteriumID) Is Null));

Hier bekomme ich nichts herraus, spricht es werden überhaupt keine Daten angezeigt

@ZeitGeist87
Wie soll das denn funktionieren? Habe noch nie mit einem View gearbeitet!


ene - Do 14.06.07 09:13

Sorry, da hab ich auch zu kurz gedacht, welche Version von MySQL?


ZeitGeist87 - Do 14.06.07 09:20

Ist KriteriumID in der ersten Tabelle als ForeignKey definiert?


ZeitGeist87 - Do 14.06.07 09:24

Aber um ehrlich zu sein, versteh ich dein ganzes Tabellenkonzept nicht!!!

Warum hast du in der ersten Tabelle KriteriumID und Text und in der zweiten dann nochmal??
Was bringt das??

Schau dir das mal an:
http://de.wikipedia.org/wiki/Normalisierung_(Datenbank)

Extrem wichtig bei DBMS und entwerfen von Tabellen!

Wichtig sind nur die ersten 3 Normalformen!