dedlfix: Code zum Nachbasteln

Beitrag lesen

Hi!

Das Problem ist die WHERE-Bedingung, die zieht "zu spät".

Vielleicht noch ein Wort zu meiner Vorgehensweise. Gewusst habe ich vorher schon, dass die Verknüpfungsbedingung um weitere Kriterien ergänzt werden kann, die nicht die Beziehung zwischen den beiden Tabellen ausdrücken, sondern eben auch nur einschränkend wirken können. (Das gehört oftmals nicht zum allgemein vorhandenen Wissen über Joins.)

Ich sah das WHERE und verdächtigte es, die bereits gejointe Menge zu plündern statt nur meinetabelle zu beschränken. Also raus mit dem WHERE - und siehe da, die Ergebnismenge war wieder vollzählig. Noch schnell das WHERE wieder rein und den status-Vergleich auf qq geändert - ergab drei Datensätze - Verdacht bestätigt. Das WHERE zum AND umschreiben (und qq zurück zu xx) ergab 5 Datensätze mit lauter NULL-Werten, aber so soll das sein. xx wieder zu qq geändert brachte ebenfalls 5 Datensätze, drei "volle", zwei "leere". Problem gelöst.

Im Prinzip ist das bereits erklärlich, wenn man sich das Prinzip der Abarbeitungsweise eines SELECT-Statements verdeutlicht. Abgesehen von der SELECT-Klausel werden alle anderen Klauseln von links nach rechts abgearbeitet und jeweils ein Zwischenergebnis an den nächsten Schritt weitergereicht. FROM und die Joins sammelen erstmal alles Quellen zusammen und verknüpfen diese. Die Menge daraus wird vom WHERE eingeschränkt und so weiter Richtung rechtes Ende. Eine Ausnahme bildet die SELECT-Klausen, die zwischen GROUP BY und HAVING die Berechnung der Spalten vornimmt. (Hier gibt es noch ein paar Abkürzungen seitens des internen Optimierers des DBMS, aber die beeinflussen das Ergebnis nicht.) Mit diesem prinzipiellen Ablauf kann man auch schön die Wirkung der Bedingungen in der JOIN-Klausel gegenüber der WHERE-Klausel sehen.

Lo!

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