SQL Abfrage?

3 Antworten

Deiner Systembeschreibung zufolge würde ich diese Tabellen mit folgendem Aufbau definieren:

CREATE TABLE kunde (
  id INT NOT NULL AUTO_INCREMENT,
  anreise DATE,
  abreise DATE,
  PRIMARY KEY(id)
);

CREATE TABLE zimmer (
  id INT NOT NULL AUTO_INCREMENT,
  PRIMARY KEY(id)
);

CREATE TABLE kunde_hat_zimmer (
  kunde_id INT, 
  zimmer_id INT,
  FOREIGN KEY (kunde_id) REFERENCES kunde(id),
  FOREIGN KEY (zimmer_id) REFERENCES zimmer(id)
);

Eine Tabelle hotel erachte ich als nicht notwendig. Das wäre meiner Meinung nach eher nur der Name der Datenbank.

Für eine Abfrage, welche Zimmer in dem gegebenen Zeitraum belegt sind, bräuchtest du einen INNER JOIN, der die Tabellen kunde_hat_zimmer und kunde anhand ihrer ID zusammenzieht.

SELECT kunde.id FROM kunde
JOIN kunde_hat_zimmer ON kunde.id = kunde_hat_zimmer.zimmer_id
WHERE
  kunde.anreise <= '2024/01/10'
AND
  kunde.abreise >= '2024/01/01'
Mirko Marek  28.01.2024, 14:55

Ich würde vielleicht die Tabel kunde_hat_zimmer einfach buchung nennen und ein zusätzliches Feld für status hinzufügen. Denn meist sind das Reservierungen die auch auslaufen können...

0
regex9  28.01.2024, 16:38
@ Mirko Marek

Ein Buchungsstatus wäre vielleicht eine Überlegung für eine Systemerweiterung. Die oben beschriebene Aufgabenstellung beinhaltet diese Anforderung nicht.

1
Mirko Marek  29.01.2024, 14:55
@regex9

stimmt auch wieder, aber der reservierungsstatus wäre logisch mit zu erwähnen.

0
Ich weiß allerdings nicht, wie ich eine Abfrage zum letzten Punkt machen soll.

Ohne die Tabellenstruktur zu kennen, wird dir das hier auch niemand sagen können.

Also die Tabellen wären einfach "Kunde", "Hotel" und "Zimmer".

Kunde ist ja noch klar. Zimmer wäre - je nach Feldern - auch noch nachvollziehbar. Nur was soll die Tabelle Hotel?

Es sollte in der Tabelle „Zimmer“ einen Eintrag für die Belegungszeit des Zimmers geben, den du setzen musst. Oder gibt es alternativ eine entsprechende Tabelle?

Woher ich das weiß:Berufserfahrung