Announcement

Collapse
No announcement yet.

Abfrage die Null ergibt ersetzen

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

  • Abfrage die Null ergibt ersetzen

    Guten Tag

    Ich frage meine Datenbank ab ob der Raum X zu einer bestimmten Zeit besetzt ist. Fals er das nicht ist wird die Abfrage NULL ergeben. Nun soll aber nicht der Wert NULL sondern die Ausage "Dieser Raum ist zu dieser Zeit Frei" ausgegeben werden. Ist das irgendwie möglich?

    Gruss Bonsai

  • #2
    SELECT COALESCE (Raum, 'frei') FROM ...

    oder

    SELECT CASE WHEN Raum IS NULL THEN 'frei' ELSE Raum END FROM....

    Comment


    • #3
      ... oder bei MySQL mit IFNULL()...
      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


      • #4
        Danke für die Antworten, das hab ich eben auch schon alles ausprobiert nur ergiebt diese NULL Abfrage:

        SELECT ifnull( vorlesungen.PS_VorID, 'Dieser Raum ist zu dieser Zeit Frei')
        FROM vorlesungen INNER JOIN zeiten ON vorlesungen.FS_zeit = zeiten.PS_Zeiten INNER JOIN räume ON vorlesungen.FS_Raum = räume.PS_RaumID INNER JOIN Tage ON vorlesungen.FS_Tag = Tage.PS_TagID
        WHERE FS_Tag = 5 AND (FS_Zeit = 1 OR FS_Zeit = 2) And PS_RaumID = 6

        Immmer noch nicht die Aussage an. Das müsste doch so korrekt sein oder?

        Comment


        • #5
          Originally posted by Blackbonsai View Post
          SELECT ifnull( vorlesungen.PS_VorID, 'Dieser Raum ist zu dieser Zeit Frei')
          FROM vorlesungen INNER JOIN zeiten ON vorlesungen.FS_zeit = zeiten.PS_Zeiten INNER JOIN räume ON vorlesungen.FS_Raum = räume.PS_RaumID INNER JOIN Tage ON vorlesungen.FS_Tag = Tage.PS_TagID
          WHERE FS_Tag = 5 AND (FS_Zeit = 1 OR FS_Zeit = 2) And PS_RaumID = 6
          Ich hab mir Dein select nicht angeschaut und möchte nur die Bemerkung abgeben, dass eine Abfrage, die keinen(!) Datensatz zurückliefert, auch nicht mit NULL Prüfungen "erkannt" werden kann.
          Gruß, defo

          Comment


          • #6
            Originally posted by defo View Post
            eine Abfrage, die keinen(!) Datensatz zurückliefert, auch nicht mit NULL Prüfungen "erkannt" werden kann.
            ok dan ist es ja logisch das es nicht funktioniert, giebt es den eine Möglichkeit anstadt keinen Datensatz den oben genanten String als ausgabe zu bekommen?

            Comment


            • #7
              Du musst eine Menge bilden, die
              1. Deine Sollmenge ist, Grundmenge, nenn es wie Du willst, im Endeffekt die Entität, die angezeigt werden soll.
              2. Du musst einen outer join zu Deinem alten, logisch ja richtigen Ergebnis bilden
              3. Du kannst darauf dann die IF Null etc. Prüfung aufsetzen.
              Gruß, defo

              Comment


              • #8
                Originally posted by Blackbonsai View Post
                ...giebt es den eine Möglichkeit anstadt keinen Datensatz den oben genanten String als ausgabe zu bekommen?
                Für den Fall das dein Ergebnis im positiven Fall aus EINEM Datensatz besteht und im negativen Fall eben auch nur EIN Datensatz erscheinen soll, könnte man hier ein Aggregat "missbrauchen"

                [highlight=sql]
                SELECT ifnull( max(vorlesungen.PS_VorID), 'Dieser Raum ist zu dieser Zeit Frei')
                ...
                [/highlight]
                Eine Abfrage dieser Form liefert nämlich IMMER ein Ergebnis.

                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


                • #9
                  Originally posted by Falk Prüfer View Post
                  Für den Fall das dein Ergebnis im positiven Fall aus EINEM Datensatz besteht und im negativen Fall eben auch nur EIN Datensatz erscheinen soll, könnte man hier ein Aggregat "missbrauchen"
                  [highlight=sql]
                  SELECT ifnull( max(vorlesungen.PS_VorID), 'Dieser Raum ist zu dieser Zeit Frei')
                  ...
                  [/highlight]
                  Eine Abfrage dieser Form liefert nämlich IMMER ein Ergebnis.
                  Das ist praktisch und Du nennst die "Randbedingungen" ja auch gleich dazu. Um sie einzuhalten, verwende ich sowas nur in Stored Procs, in denen ein statischer Where Teil sicherstellt, dass höchstens ein Satz rauskommt. IdR. ein Einschränkung auf den PK....
                  Gruß, defo

                  Comment


                  • #10
                    Originally posted by Falk Prüfer View Post
                    Für den Fall das dein Ergebnis im positiven Fall aus EINEM Datensatz besteht und im negativen Fall eben auch nur EIN Datensatz erscheinen soll, könnte man hier ein Aggregat "missbrauchen"

                    [highlight=sql]
                    SELECT ifnull( max(vorlesungen.PS_VorID), 'Dieser Raum ist zu dieser Zeit Frei')
                    ...
                    [/highlight]
                    Eine Abfrage dieser Form liefert nämlich IMMER ein Ergebnis.

                    Gruß Falk
                    Vielen dank das hat super Funktioniert!

                    Comment

                    Working...
                    X