dedlfix: Code zum Nachbasteln

Beitrag lesen

Hi!

ich habe es geschafft, nachvollziehbaren Code zu generieren, der mein Problem transparent machen dürfte:
SELECT *, FROM_UNIXTIME(m.Unixstamp, '%Y|%m')
FROM tmp t
LEFT JOIN meinetabelle m ON t.Monat = FROM_UNIXTIME(m.Unixstamp, '%Y|%m')
WHERE
loesch != 1 AND
Status = 'xx'
GROUP BY t.Monat DESC;
Als Ergebnismenge erhältst Du ein leeres Resultat.

Das Problem ist die WHERE-Bedingung, die zieht "zu spät". Der Join bildet die verknüpfte Menge - da sind die alle Einträge noch da. Nun wirkt das WHERE und findet in dieser Menge nichts passendes. Das Resultat kennst du. Als Lösungen fallen mir zwei Vorgehensweise ein:
Die ausschließenden Bedingungen müssen als weitere Verknüpfungsbedingung hinzugefügt werden, dann werden von meinetabelle nur die Datensätze verknüpft, die in diese Bedingung passen, von tmp aber alle genommen. Der relevante Teil der Query sieht dann so aus:

FROM tmp t
LEFT JOIN meinetabelle m ON
  t.Monat = FROM_UNIXTIME(m.Unixstamp, '%Y|%m') AND
  loesch != 1 AND
  Status = 'xx'
GROUP BY ...

Die zweite Lösung wäre, die zu berücksichtigenden Daten aus meinetabelle in einer Subquery zu ermitteln und diese Menge dann mit der tmp zu joinen.

FROM tmp t
LEFT JOIN (SELECT whatever FROM meinetabelle WHERE loesch != 1 AND Status = 'xx') m ON
  t.Monat = FROM_UNIXTIME(m.Unixstamp, '%Y|%m')
GROUP BY ...

Bei der Subquery sieht man etwas besser, dass bestimmte Daten ausgeschlossen werden sollen, weil diese anders als die Variante mit der erweiterten Join-Bedingung schon durch die Klammerung eine syntaktische Einheit bildet. Zumdem kann man die Subquery einfacher rauskopieren und wieder einfügen, wenn man sie einzeln testen und weiterentwickeln will.

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