Soios Geschrieben 23. Juli 2020 Geschrieben 23. Juli 2020 Die Aufgabe beschäftigt mich nun schon einige Zeit, ich komme nicht so ganz dahinter was die IHK da veranstaltet. Ausgehend von dem nicht-ihk-dateformat bin ich zu der Lösung gekommen = SELECT Bett_Nummer FROM bett WHERE bett_ID NOT IN (SELECT b.Bett_ID FROM bett as b LEFT JOIN zimmer AS z ON b.Bett_ID = z.Z_Bett_ID LEFT JOIN patient_aufenthalt AS pa ON z.Z_ID = pa.PatAuf_ZID WHERE "2020-04-21" BETWEEN pa.PatAuf_AufnahmeDatum AND pa.PatAuf_EntlassDatum) ORDER BY Bett_Nummer; Würde mich über Input freuen, sehr gerne auch alternative Lösungsansätze und ne erklärung zur IHK Lösung. Zitieren
Rienne Geschrieben 24. Juli 2020 Geschrieben 24. Juli 2020 Hallo, gerade bei SQL Abfragen gibt es seltenst nur eine Lösung. Solange das Ergebnis der Aufgabenstellung entspricht, gibt es auch Punkte dafür. Jedoch ist es auch so, dass jede SQL-Ausprägung(OpenSQL, MySQL, MSSQL,...) noch mal eigene Ausdrücke und Funktionalitäten hat. Da weiß ich nicht, was genau die IHK/der jeweile PA an Statements zulässt. Daher würde ich mich versuchen an die zu halten, die in der Erläuterung bei der Prüfung angegeben sind. Sollte da 'NOT IN' und 'BETWEEN' dabei sein, sollte deine Lösung vermutlich auch passen. Was genau verstehst du denn an der Musterlösung nicht? Wenn du das konkretisieren könntest, lässt es sich vermutlich einfacher erklären. Zitieren
Whiz-zarD Geschrieben 24. Juli 2020 Geschrieben 24. Juli 2020 @Rienne: Das Problem ist, dass Bett "07785688" (ID 4) am 21.04.2020 belegt ist, aber in der Musterlösung angegeben wird, dass es nicht belegt sei. Ich würde sagen, dass die Musterlösung (mal wieder) falsch ist. Ich kann mir nicht erklären, warum das Bett mit der ID 4 am 21.04.2020 frei sein sollte. Wie du schon richtig erkennst, ist das Bett belegt. Vielleicht braucht man mal die komplette Aufgabe. Vielleicht stehen da noch Hinweise drinnen. Ich würde vielleicht sogar mit MINUS arbeiten. Also zu erst alle Betten ermitteln, die es gibt und dann die davon abziehen, die in diesem Zeitraum belegt waren: SELECT Bett.Bett_Nummer FROM Bett MINUS SELECT Bett.Bett_Nummer FROM Bett INNER JOIN Zimmer ON Zimmer.Z_BettID = Bett.Bett_ID INNER JOIN Patient_Aufenthalt ON Patient_Aufenthalt.PatAuf_ZID = Zimmer.Z_ID WHERE DATE '2020-04-21' BETWEEN Patient_Aufenthalt.PatAuf_AufnahmeDatum AND Patient_Aufenthalt.PatAuf_EntlassDatum Als Ergebnis erhalte ich ja die Liste, mit Betten, die nicht belegt waren. Deine Lösung mit dem IN-Operator könnte ggf. Performace-Probleme verursachen, wenn deine Unterabfrage zu viele Ergebnisse liefert. Den IN-Operator sollte man nur dann nehmen, wenn man weiß, dass die Menge überschaubar ist, weil der IN-Operator erstmal alle Daten ermittelt, bevor er ausgeführt werden kann. Soios reagierte darauf 1 Zitieren
Rienne Geschrieben 24. Juli 2020 Geschrieben 24. Juli 2020 (bearbeitet) @Whiz-zarD Achso, darum geht es. Das ist aber dann nicht in der Lösung falsch angegeben, sondern das Bildchen der Auswahl in der Aufgabenstellung. Da es da allerdings ja eig. nur darum geht, wie die Ausgabe vom Format her aussehen soll, hätte ich in der Prüfungssituation, gar nicht darauf geachtet, ob sie auch zwingend korrekte Daten anzeigt. Hatte vermutet, es geht eher darum, ob es beim Count überhaupt ein Ergebnis für Bettennummern gibt, die gar nicht in Aufenthaltstabelle auftauchen (weil z.B. nie belegt) und was die Abfrage bezwecken soll, ob das Entlass-Datum "null" ist. Aber ich erinnere mich daran, dass meine Datenbank-Lehrerin sich damals auch mehrfach beschwert hat, dass insbesondere bei den SQL-Aufgaben eigentlich IMMER Fehler in den Musterlösungen sind. Bin jedoch bei SQL auch nicht (mehr) so fit, da ich es selten in komplexer Form nutze. Bearbeitet 24. Juli 2020 von Rienne Zitieren
Whiz-zarD Geschrieben 24. Juli 2020 Geschrieben 24. Juli 2020 (bearbeitet) vor einer Stunde schrieb Rienne: @Whiz-zarD Achso, darum geht es. Das ist aber dann nicht in der Lösung falsch angegeben, sondern das Bildchen der Auswahl in der Aufgabenstellung. Da es da allerdings ja eig. nur darum geht, wie die Ausgabe vom Format her aussehen soll, hätte ich in der Prüfungssituation, gar nicht darauf geachtet, ob sie auch zwingend korrekte Daten anzeigt. Das stimmt nicht. Das Ergebnis passt exakt zum SQL-Statement. Das witzige ist, dass das besagte Bett das einzige ist, was tatsächlich an dem Tag belegt ist und dennoch wird es als nicht belegt ausgewiesen. Der Grund dafür liegt nämlich daran, dass nur geschaut wird, ob das Bett noch belegt ist (pa.PatAuf_EntlassDatum is null) oder ob das Entlassungsdatum kleiner als 21.04.2020 ist. Das ist eine komplett falsche Abfrage. Es wird überhaupt nicht der Zeitraum betrachtet, wo die Betten tatsächlich belegt waren. Das sieht man schon daran, dass das Aufnahmedatum in der Musterlösung überhaupt nicht vorkommt. Ich kann das Entlassungsdatum entfernen, dann wir das bett als belegt ausgewiesen bzw. taucht im Ergebnis nicht mehr auf. Füge ich das Datum wieder hinzu, dann ist das Bett plötzlich unbelegt. Bearbeitet 24. Juli 2020 von Whiz-zarD Zitieren
Soios Geschrieben 24. Juli 2020 Autor Geschrieben 24. Juli 2020 vor 2 Stunden schrieb Whiz-zarD: Das stimmt nicht. Das Ergebnis passt exakt zum SQL-Statement. Das witzige ist, dass das besagte Bett das einzige ist, was tatsächlich an dem Tag belegt ist und dennoch wird es als nicht belegt ausgewiesen. Der Grund dafür liegt nämlich daran, dass nur geschaut wird, ob das Bett noch belegt ist (pa.PatAuf_EntlassDatum is null) oder ob das Entlassungsdatum kleiner als 21.04.2020 ist. Das ist eine komplett falsche Abfrage. Es wird überhaupt nicht der Zeitraum betrachtet, wo die Betten tatsächlich belegt waren. Das sieht man schon daran, dass das Aufnahmedatum in der Musterlösung überhaupt nicht vorkommt. Ich kann das Entlassungsdatum entfernen, dann wir das bett als belegt ausgewiesen bzw. taucht im Ergebnis nicht mehr auf. Füge ich das Datum wieder hinzu, dann ist das Bett plötzlich unbelegt. Sehr beruhigend das von dir zu lesen. Hatte mit der Aufgabe sowieso schon zu kämpfen (Anfänger ) und habe dank der IHK Lösung mal wieder komplett an meinem können gezweifelt. Danke für den Hinweis mit MINUS! Zitieren
Whiz-zarD Geschrieben 24. Juli 2020 Geschrieben 24. Juli 2020 vor 19 Minuten schrieb Soios: Sehr beruhigend das von dir zu lesen. Hatte mit der Aufgabe sowieso schon zu kämpfen (Anfänger ) und habe dank der IHK Lösung mal wieder komplett an meinem können gezweifelt. Danke für den Hinweis mit MINUS! Ja, ich hab auch lange gebraucht, bis ich das Datenbankmodell überhaupt verstanden habe, da dies gegen jeglicher Logik spricht. Für gewöhnlich wird einem Patienten ein Bett zugeteilt und ein Bett ein Zimmer, da nun mal mehrere Betten in einem Zimmer stehen können. Hier ist es aber so, dass einem Patienten ein Zimmer zugeteilt wurde. Damit hat man nun zwangsläufig das Problem, dass ein Zimmer nur ein Bett haben kann, weil man sonst nicht nachvollziehen kann, welcher Patient nun in welchem Bett liegt. Die Aufgabe hätte auch "Erstellen Sie eine SQL-Anweisung, mit der alle freien Zimmer am 21.04.2020 wie folgt aufgelistet werden" lauten können. Das Ergebnis ist das gleiche. Zitieren
Soios Geschrieben 24. Juli 2020 Autor Geschrieben 24. Juli 2020 Is doch super wenn sich 2 Patienten n Bett teilen dürfen 🙄 0x00 reagierte darauf 1 Zitieren
Rienne Geschrieben 24. Juli 2020 Geschrieben 24. Juli 2020 vor 7 Stunden schrieb Whiz-zarD: Hier ist es aber so, dass einem Patienten ein Zimmer zugeteilt wurde. Damit hat man nun zwangsläufig das Problem, dass ein Zimmer nur ein Bett haben kann, weil man sonst nicht nachvollziehen kann, welcher Patient nun in welchem Bett liegt. Das stimmt nicht ganz. Ein Zimmer kann schon mehrere Betten haben (Siehe Tabelle Zimmer), jedoch hat ein Zimmer damit mehrere Zimmer-IDs, was die Bezeichnung der Tabellen und Felder nicht nachvollziehbar macht. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.