Jürgen: 2 Queries, die dasselbe Ergebnis bringen sollen, aber nicht tun

Hi,

diese Query ist gut:

  
SELECT FROM_UNIXTIME(Datum, '%Y%|%m') AS ym from table where (SELECT FROM_UNIXTIME(Datum, '%Y%|%m')="2010|01")  

Diese hier sollte dasselbe Ergebnis bringen, aber das macht sie nicht.
Meine Frage ist, warum nicht?

  
SELECT FROM_UNIXTIME(Datum, '%Y%|%m') AS ym from table where ym="2010|01"  

Grüße, Jürgen

  1. aber das macht sie nicht.

    Was macht sie dann?
    Bei mir heißt es bei so einem Versuch dass der Alias im WHERE noch nicht bekannt ist.

  2. Hi!

    Diese hier sollte dasselbe Ergebnis bringen, aber das macht sie nicht.
    SELECT FROM_UNIXTIME(Datum, '%Y%|%m') AS ym from table where ym="2010|01"

    Das kann so nicht funktionieren, weil die Reihenfolge der Abarbeitung nicht zulässt, dass ein Alias aus der SELECT-Klausel in der WHERE-Klausel verwendet werden kann.

    FROM legt die beteiligten Tabellen fest.
    WHERE schränkt die zu berücksichtigenden Datensätze ein.
    GROUP BY nimmt eine Zusammenfassung vor.
    Jetzt erst kommt das SELECT und berechnet die Ergebnismenge inklusive der dort angegebenen Formeln.
    HAVING schränkt die Ergebnismenge weiter ein.
    ORDER BY sortiert und
    LIMIT nimmt den angegebenen Teil aus der Ergebnismenge.

    Das SELECT kommt erst zum Zuge, wenn das WHERE schon längst Geschichte ist. Eine Bezugnahme kann immer nur in späteren Schritten erfolgen.

    Lo!

  3. Hi,

    abgesehen vom bisher schon gesagten:

    diese Query ist gut:

    Nö.

    SELECT FROM_UNIXTIME(Datum, '%Y%|%m') AS ym from table where (SELECT FROM_UNIXTIME(Datum, '%Y%|%m')="2010|01")

    Wozu nutzt du hier ein „statisches“ Subselect, anstatt einfach die Funktion direkt zu aufzurufen?

    Ausserdem würde ich an der Stelle nicht mit einem formatierten Datum arbeiten - den Inhalt des Datum-Feldes jedes einzelnen Datensatzes entsprechend aufzubereiten, nur um dann einen Stringvergleich durchzuführen, erscheint mir nicht besonders performant.
    YEAR() und MONTH() bereiten ein Datum zwar auch in gewisser Weise auf - aber nach meinem subjektiven Empfinden irgendwie „nativer“ und vermutlich günstiger.

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
    1. diese Query ist gut:

      Nö.

      Nicht?
      Machst Du mal einen Gegenvorschlag? Ich hab Dein post nicht ganz nachvollziehen können.

      Mfg, Jürgen

      1. Hi,

        Nicht?
        Machst Du mal einen Gegenvorschlag?

        Hab ich doch.

        MfG ChrisB

        --
        “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]