Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

 

Die Aufgabe beschäftigt mich nun schon einige Zeit, ich komme nicht so ganz dahinter was die IHK da veranstaltet.

image.thumb.png.2185cb53576b090489fa4fcc23f92345.png

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;

image.png.0a2a9ff8f4c7989b7f97098646b5411a.png

Würde mich über Input freuen, sehr gerne auch alternative Lösungsansätze und ne erklärung zur IHK Lösung.

Geschrieben

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. :)

Geschrieben

@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. 

Geschrieben (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 von Rienne
Geschrieben (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 von Whiz-zarD
Geschrieben
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! 

Geschrieben
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.

Geschrieben
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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...