Franco: Nachschlag, Tag 3

Beitrag lesen

Hi dedlfix,

Eine Subquery ist (mit der Ausnahme der korrelierten) ein autarkes Gebilde. Sie liefert ein (skalares) einfaches Ergebnis oder eine Ergebnismenge. So eine Ergebnismenge bildet quasi eine temporäre Tabelle.

Die ersten 9 Pfennig des Groschens fallen gerade hier. Also ist das quasi tatsächlich identisch mit der temporären Tabelle.

Zudem willst du ja eigentlich nur die bereits vorhandene Abfrage um die nicht vorhandenen Monate erweitern. Deshalb muss alles in die Subquery rein, was das bisherige Ergebnis geliefert hat. Das heißt, die Gruppierung muss in die Subquery und sich dann auch auf ein Feld der Subquery-Tabelle beziehen.

Ja, ok. Die Subquery ist die eigentliche Abfrage und ich gehe dann mit ihr genauso um, als wenn ich eine Tabelle zum joinen hätte. Die Hauptquery ist bietet mir die Monate und - analog zum normalen JOIN mit einer anderen Tabelle - eine Spalte dieser "virtuellen" Tabelle.

Ja, und wie nicht anders zu erwarten liefern Deine beiden Queries exakt die Queries, die ich auch habe, wenn auch einmal auf eine temp.Tabelle bezogen und zum zweiten im anschließenden LEFT JOIN der beiden temporären Tabellen.

Mist. Ich wußte immer schon, dass ich besonders schnell lerne, wenn ich Code zum Vergleich habe. So im Vergleich zwischen den beiden Läösungen erscheint mir nun auch der Subselect völlig easy und nachvollziehbar. Ich muß aber einräumen, dass nur der Subselect ( ohne Deinen Zwischenschritt der 2. temporären Tabell zum  JOIN) mir auch der Code zum Verstehen alleine nicht gereicht hätte. Deshalb besonderen Dank für diese "Eselsbrücke".

Nun noch eine Frage zur Performance. Welche der Lösungen ist performanter. Ich habe in mein Beispiel ja nun bereits die Löung der 2 temporären Tabellen adaptiert.
Ich würde aber zu Gunsten besserer Performance nochmal auf die Subselect-Lösung umstricken.

Was meinst Du?

Ok, in dem Fall kann es fast egal sein, ob da was kollidiert. Lediglich Zugriffe zwischen Löschen und erneutem Einfügen ergeben Mist.

Korrekt. Das sehe ich genauso.

Wenn jeder Client hingegen eigene Zeiträume abfragt, kann man das nicht mehr einfach so auf die leichte Schulter nehmen.

Stimmt.

Auf jeden Fall. Das ist schon durch die implizite Bindung der Temp-Tabelle an die Client-Session bestens abgeschirmt.

Ist schon genau so umgesetzt. Ich hatte da heute morgen einfach ein Problem eines fehlenden Tabellenpräfixes, das mich irritiert hatte.

Wenn das bis hierher für Dich einfach war, wird es Dich freuen, dass sich für mich vorhin das Problem nochmal ein wenig verschärft hat, weil im Beispiel mit den zu addierenden und zu multiplizierenden Werten mein Timestamp in der Tabelle der falsche ist. Der korrekte Timestamp ist aber nicht verloren, sondern steht nur in einer anderen Tabelle, die ich über einen oder zwei JOINS ansprechen könnte.
Bevor ich aber frage, möchte ich erst ein wenig selber versuchen, der Lösung näher zu kommen.

Wenn ich das nicht schaffe, würde ich mich natürlich über weitere Hilfe freuen.

Bis dhin erstmal wieder vielen Dank

Frank

0 54

Problem bei einer Query

Franco
  • datenbank
  1. 0
    suit
  2. 0
    dedlfix
    1. 0
      Franco
      1. 0
        Vinzenz Mai
        1. 0
          Franco
          1. 0
            dedlfix
            1. 0
              Franco
              1. 0
                dedlfix
                1. 0
                  Franco
                  1. 0
                    Vinzenz Mai
                    1. 0
                      Franco
                      1. 0
                        dedlfix
                        1. 0
                          Franco
                          1. 0
                            dedlfix
                            1. 0
                              Franco
                              1. 0
                                dedlfix
                                1. 0
                                  Franco
                                  1. 0

                                    Code zum Nachbasteln

                                    Franco
                                    1. 0
                                      dedlfix
                                      1. 0
                                        dedlfix
                                        1. 0
                                          Vinzenz Mai
                                        2. 0
                                          Franco
                                          1. 0
                                            Vinzenz Mai
                                            1. 0

                                              Nachschlag

                                              Franco
                                              1. 0
                                                Ilja
                                                1. 0
                                                  dedlfix
                                                  1. 0
                                                    Franco
                                                  2. 0
                                                    Ilja
                                              2. 0
                                                dedlfix
                                                1. 0
                                                  Franco
                                                  1. 0
                                                    Vinzenz Mai
                                                    1. 0
                                                      Franco
                                                  2. 0
                                                    dedlfix
                                                    1. 0
                                                      Franco
                                                      1. 0

                                                        Nachschlag, Tag 3

                                                        Franco
                                                        1. 0
                                                          dedlfix
                                                          1. 0
                                                            Franco
                                                            1. 0
                                                              dedlfix
                                                              1. 0
                                                                Franco
                                                                1. 0
                                                                  Franco
                                                                2. 0
                                                                  dedlfix
                                            2. 0
                                              Franco
                          2. 0
                            Ilja
                  2. 0
                    dedlfix
                    1. 0
                      Franco
                      1. 0
                        dedlfix
    2. 0
      Franco
      1. 0
        dedlfix
        1. 0
          Franco
          1. 0
            dedlfix
        2. 0
          Franco
          1. 0
            dedlfix
            1. 0
              Franco