Announcement

Collapse
No announcement yet.

Bei leerem Abfrageergebnis Standardwerte setzen

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

  • #31
    kann ich da jetzt noch ne union mit not exists anhängen?

    Comment


    • #32
      Originally posted by A.DA View Post
      kann ich da jetzt noch ne union mit not exists anhängen?
      Ja, das beißt nicht.
      Aber hast Du ja sicher auch schon nachgelesen.

      Im ursprünglichen Ansatz war der "not exists" Teil direkt im "ersten" UNION Teil gedacht.
      Gruß, defo

      Comment


      • #33
        !?

        Ja, ich bekomme viele Ausgaben... Leider nicht die, die ich benötige.

        Da ich schon ne gefühlte Ewigkeit daran herum bastele werden meine grauen Haare immer mehr......

        das Problem in dem Beispiel Union mit not exists ist, dass ich wenn der Datensatz im ersten Teil leer ist (Belegung) nicht weiter nach dem PC gepüft wird ( Temp)....

        Werde heute abend nochmal einen Versuch starten...... Das ganze ist mir noch ein wenig abstrakt. Eine fertige Abfrage nachvollziehen ist etwas einfacher. Aber diese Geschichte ist etwas schwieriger für mich.

        Mein Problem sind die verschiedenen Möglichkeiten im Ergebnis.

        Datensatz gültig ja/nein oder erst garnicht vorhanden dann gültig ja und bearbeitet ja/nein

        ich geb aber nicht auf..... Habe ja gute (und geduldige) Hilfe

        Comment


        • #34
          Hallo,
          Originally posted by A.DA View Post
          ...wenn der Datensatz im ersten Teil leer ist (Belegung) nicht weiter nach dem PC gepüft wird ( Temp)....
          vlt. solltest du dann einfach mal den entsprechenden LEFT JOIN durch einen OUTER JOIN ersetzen!

          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


          • #35
            http://sqlfiddle.com/#!2/d87e2/41

            die RaumID 601 ist in der Belegung 2x vorhanden und in der TEMP nicht.

            setze die RaumID auf 600 in der Abfrage und siehe was passiert

            die RaumID 600 ist in der Belegung nicht vorhanden jedoch im TEMP

            wenn die 600 in beiden tabellen nicht zu finden ist sollen feste werte vergeben werden.
            ist die 600 nur in einer der beiden Tabellen vorhanden soll für die NULL der jeweiligen tabelle ein fix Wert eingetragen werden
            Zuletzt editiert von A.DA; 21.01.2014, 17:50.

            Comment


            • #36
              Originally posted by A.DA View Post
              http://sqlfiddle.com/#!2/d87e2/41

              die RaumID 601 ist in der Belegung 2x vorhanden und in der TEMP nicht.

              setze die RaumID auf 600 in der Abfrage und siehe was passiert

              die RaumID 600 ist in der Belegung nicht vorhanden jedoch im TEMP

              wenn die 600 in beiden tabellen nicht zu finden ist sollen feste werte vergeben werden.
              ist die 600 nur in einer der beiden Tabellen vorhanden soll für die NULL der jeweiligen tabelle ein fix Wert eingetragen werden
              Das Problem liegt nicht am UNION, sondern an der Kernabfrage, wenn Du 2 Tabellen joinst und Ergebnisse entweder aus der einen oder der anderen Tabelle erhalten möchtest und also mit Outer Joins arbeitest, die Where Bedingung aber nur an eine Tabelle hängst, kann das nicht funktionieren.

              Ich habe mal folgendes gemacht (für das Kernstatement). Deine Kennzahl RaumID als separate Datenquelle angelegt (Technik: Virtuelle Tabelle ), spart in dem Fall auch die verteilten ID zu editieren/anzupassen. Daran per Outer Join Deine beiden Datentabellen, jede von den beiden Tabellen hängt nun "frei" an der (virtuellen) Haupttabelle und kann wg Outer Join ergebnisse liefern oder eben nicht.
              http://sqlfiddle.com/#!2/d87e2/56
              [highlight=SQL]
              SELECT bel.raumID,
              md5(concat(bel.buch, bel.platzID, bel.bel_status)) AS md5hash,
              if(md5(concat(bel.buch, bel.platzID, bel.bel_status)) =
              '37eb62340f800d7f9e2f6f6c850860f2',
              'ja',
              'nein') AS gueltig,
              pc. *,
              Date_Format(temp.arbeitbeginn, '%d.%m.%Y %H:%m:%s') AS tag,
              if(temp.raumID = '600' AND temp.pcID != '34', 'ja', 'nein') AS inBearbeitung
              FROM (select 600 as RID) x
              left join ac_alle_belegung AS bel
              on x.rid = bel.raumid
              left JOIN ac_alle_temp AS TEMP
              ON TEMP.raumID = x.rID
              LEFT JOIN ac_alle_pc AS pc
              ON pc.pcID = TEMP.pcID
              [/highlight]

              Grundsätzlich (meine Standardhinweise):
              SQL arbeitet mit Mengen. Bilde geeignete Teilmengen, deren Ergebnisse Du mit bloßem Auge validieren kannst (Dazu gehören kleine Mengen Testdaten). Bau aus den Abfragen zu den Teilmengen Dein Gesamtkunstwerk. SQL Statements zu verschachteln tut nicht weh, mit aussagekräftigen Alias und ein paar Kommentaren versehen kann so auch später noch verstehen, was da gemacht wurde (oder zumindest, wie es gedacht war)

              P.S: SQL Code einzurücken und ein bestimmtes Format einzuhalten ist eine sehr hilfreiche Sache, besonders wenn die Statements komplexer werden. Das Teil auf SQLFiddle funktioniert bei mir zwar nicht, aber es gibt genügend andere brauchbare SQL Online Formater, falls die hauseigenen Tools das nicht können.
              Zuletzt editiert von defo; 21.01.2014, 20:31. Reason: Einfach so
              Gruß, defo

              Comment


              • #37
                woauh...
                feine Sache hab alle Szenarien durchprobiert, ich denke Deine Umsetzung reicht mir aus.....

                Aber ich will es auch verstehen...
                FROM (SELECT 600 AS RID) x
                was bedeutet denn Outer JOIN ? heute schon ein paar mal gelesen, jedoch keine wirkliche Erklärung dazu gefunden....

                http://sqlfiddle.com/#!2/955fe/9
                Zuletzt editiert von A.DA; 21.01.2014, 21:36. Reason: sqlfiddle Code angepasst

                Comment


                • #38
                  Originally posted by A.DA View Post
                  Aber ich will es auch verstehen...

                  was bedeutet denn Outer JOIN ? heute schon ein paar mal gelesen, jedoch keine wirkliche Erklärung dazu gefunden....
                  Du hast bereits Outer Joins benutzt, das ist ein Oberbegriff, siehe hier oder an vielen anderen Stellen:
                  http://wikis.gm.fh-koeln.de/wiki_db/...n/Join-Typ-SQL

                  Lies Dir das mal durch oder andere Quellen und vor allem probier es aus!
                  Gruß, defo

                  Comment


                  • #39
                    FROM (SELECT 600 AS RID) x
                    auf die Idee wäre ich nie gekommen.

                    was passiert denn damit?

                    Comment


                    • #40
                      Äh, hast Du es einfach mal abgefragt?
                      Auch wenn nicht, das Ergebnis ist so übersichtlich, dass man es sich denken kann, oder?

                      Deine Anforderung, "ich brauche bestimmte Daten auf jeden Fall, entweder aus der einen oder der anderen Datenquelle in meinem SQL (From Clause mit 2 Datenquellen)" zwingt zu einem Outer Join, denn eine harte Einschränkung auf beiden Datenquellen würde bereits wenn die Daten in einer Quelle fehlen zu einem leeren Ergebnis führen.
                      Diese Outer Joins bringen aber das Problem mit sich, dass es auf der "offenen" Ergebnismenge schwierig ist, einschränkende Bedingungen zu definieren (bei Dir "..where ID=600.."), zumal wenn diese Einschränkung variable für 2 Datenmengen gilt.
                      Hier bietet das "Select 600 as ID" als virtuelle Kerntabelle des Outer Join Abhilfe.

                      Es gibt wie so oft viele Wege die nach Rom führen. Wenn Dich das alles so interessiert, solltest Du Dir mal ein Buch dazu besorgen und Dich gründlich damit auseinander setzen.
                      Gruß, defo

                      Comment


                      • #41
                        solltest Du Dir mal ein Buch dazu besorgen und Dich gründlich damit auseinander setzen.
                        kannst du etwas empfehlen?

                        Comment


                        • #42
                          Nein, ich kann nur sagen, dass es echte Grundlagen sind und ein vermutlich x-beliebiges Buch Dir sehr viel weiterhelfen würde. Für den Anfang reicht sicher auch ein Internet Tutorial.
                          Dabei ist es auch relativ egal, um welche Datenbank es sich handelt, die Prinzipien sind immer gleich, die Syntax irgendwann etwas unterschiedlich (siehe z.B. Virtuelle Tabelle/ Select xy [from dual).

                          Allerdings kann man an der Stelle noch mal darauf hinweisen, dass das Ausgangsproblem zu ganz verschiedenen Lösungen führen kann. Siehe die ersten Antworten zu Deiner Frage. Das ist aber m.E. eine Glaubensfrage oder von Fall zu Fall bzw. Gesamtlösung zu Gesamtlösung unterschiedlich zu sehen.
                          In dem Moment, wo ich einen Komplexitätsgrad erreiche, den ich per SQL nicht mehr handlen kann, ist ein griffiges IF THEN ELSE im Client sicher die bessere oder zumindest schnellere Lösung.
                          Gruß, defo

                          Comment


                          • #43
                            SUPER.... alles funktioniert wie ich es mir vorgestellt habe.

                            Vielen DANK für die Geduld, Tipps und Hilfe.(besonders an defo)

                            Gruß
                            Arno

                            Comment

                            Working...
                            X