Announcement

Collapse
No announcement yet.

Abfrage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Abfrage

    Hallo,

    ich bin noch ziemlicher Neuling und habe ein kleines Problem.

    Aufgabe: Herausfinden welches Auto mit bestimmten Bedingungen zu einem bestimmten Zeitpunkt verliehen werden kann.

    vereinfacht:

    FAHRZEUG
    enthält FahrzeugID(PK)

    FAHRZEUG_VERLIEHEN
    enthält ID(PK) + FahrzeugID, MIETDAUER_ANFANG, MIETDAUER_ENDE

    FAHRZEUG_VERLIEHEN n-->1 Fahrzeug

    Jetzt habe ich eine Abfrage gebastelt:

    Select F.IDFAHRZEUG, FT.NAME, FT.SCHLAFPLAETZE, ST.ORT, ST.NAME, KHF.MIETDAUER_ANFANG, KHF.MIETDAUER_ENDE from
    FAHRZEUGTYP FT
    INNER JOIN
    FAHRZEUG F
    ON
    FT.IDFAHRZEUGTYP=F.FAHRZEUGTYP_IDFAHRZEUGTYP
    INNER JOIN
    STATION ST
    ON
    F.STATION_IDSTATION = ST.IDSTATION
    LEFT JOIN
    KUNDE_HAS_FAHRZEUG KHF
    ON
    F.IDFAHRZEUG = KHF.FAHRZEUG_IDFAHRZEUG
    WHERE
    FT.SCHLAFPLAETZE=4 and
    ST.IDSTATION = 1 and not
    (
    (KHF.MIETDAUER_ANFANG<='01.07.2007' and
    KHF.MIETDAUER_ENDE>'14.07.2007') or

    (KHF.MIETDAUER_ANFANG>='01.07.2007' and
    KHF.MIETDAUER_ENDE<='14.07.07') or

    (KHF.MIETDAUER_ANFANG<'01.07.2007' and
    (KHF.MIETDAUER_ENDE>'01.07.07' and KHF.MIETDAUER_ENDE<'14.07.2007')) or

    ((KHF.MIETDAUER_ANFANG>='01.07.2007'and KHF.MIETDAUER_ANFANG<='14.07.2007') and
    KHF.MIETDAUER_ENDE>'14.07.2007')
    );


    Leider gibt er jetzt auch Fahrzeuge aus die zu diesen Zeitpunkten schon verliehen sind, weill sie zu einem früheren Zeitpunkt schoneinmal verliehen wurden, und somit einen eigenen Datensatz bilden.

    Ich hoffe Sie verstehen das Problem und wissen eine Lösung.

    Die Datenbankstruktur sollte möglist nicht verändert werden. Es darf nur eine SQL-Abfrage sein, keine Programmiersprache ;(

    Vielen Dank

  • #2
    Hallo,

    also die Fzg, die verliehen werden können, sollten ja die sein, die im gewünschten Zeitraum nicht schon verliehen sind

    Alle im Zeitraum A - B bereits verliehenen Fzg. sind:
    [highlight=sql]SELECT FahrzeugID
    FROM FAHRZEUG_VERLIEHEN
    WHERE A <= MIETDAUER_ENDE
    AND B >= MIETDAUER_ANFANG[/highlight]

    Diese Fahrzeuge brauchst du jetzt nur von der Menge aller Fahrzeuge abzuziehen und hast die verfügbaren:
    [highlight=sql]SELECT *
    FROM FAHRZEUG FZG
    WHERE FZG.FahrzeugID NOT IN (
    SELECT FahrzeugID
    FROM FAHRZEUG_VERLIEHEN
    WHERE A <= MIETDAUER_ENDE
    AND B >= MIETDAUER_ANFANG)[/highlight]

    Oder hab ich jetzt einen Denkfehler?

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Danke für deine Hilfe!

      ich habe mittlerweile auch erfahren dass man Unterabfragen schreiben kann. (wie gesagt, ich bin totaler Neuling).

      Damit war es dann überhaupt kein Problem.

      Meine Abfrage sieht praktisch genau so aus wie deine, nur dass die Zeitraumabfragen ein bisschen komplexer sind...

      Trotzdem vielen Dank nocheinmal.

      Viele Grüße

      till

      Comment


      • #4
        Originally posted by Till11 View Post
        ...
        Meine Abfrage sieht praktisch genau so aus wie deine, nur dass die Zeitraumabfragen ein bisschen komplexer sind...
        ...
        Hallo Till,

        was heißt komplexer? Wenn du dir meine Abfrage genau ansiehst, dann wirst du feststellen, daß sie alle Varianten der Überschneidung zweier Zeiträume abdeckt, also sowohl die teilweise Überschneidung (links und rechts) als auch die komplette Überdeckung (innen und außen).

        Gruß Falk
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment


        • #5
          stimmt, du hast Recht! ich habe noch viel zu lernen, aber bin ja erst am Anfang.

          Wenn ich mal wieder eine Frage habe weiss ich wo ich mich melden kann.

          Leider habe ich heute Morgen meinem Prof schon die Lösung in die Hand gedrückt ;(

          Comment

          Working...
          X