WinFuture-Forum.de: [mysql] - Mit As Erstellter Spaltenname Funktioniert Nicht In Where Kl - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

[mysql] - Mit As Erstellter Spaltenname Funktioniert Nicht In Where Kl


#1 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 16. Juni 2010 - 22:45

Hallo,

Habe diesen Query:
SELECT fid,IF(MONTH(datum)='01',YEAR(datum)-1,YEAR(datum)) AS jj FROM `wild` WHERE jj = 2010


Und er sagt mir, dass ich jj nicht benutzten kann. Egal wie ich es nenne, nichts geht! Ich brauche aber dringend diesen Vergleich!

Ohne der WHERE-Klausel funktioniert der Query, doch ich möchte noch weiter filtern!


Gruß,
Toast
0

Anzeige



#2 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 17. Juni 2010 - 07:24

Ich habs, mit HAVING geht es! :angry:
0

#3 Mitglied ist offline   DennisMoore 

  • Gruppe: aktive Mitglieder
  • Beiträge: 177
  • Beigetreten: 27. Februar 07
  • Reputation: 0

geschrieben 17. Juni 2010 - 07:55

Schön. Sowas geht übrigens bei keinem SQL-DB Server.

Hintergrund: WHERE wird angewendet bevor der SQL-Befehl, bzw. während der SQL-Befehl abgearbeitet wird. HAVING wird danach nochmal drübergelegt.
Zum Zeitpunkt wo WHERE berücksichtigt wird, gibts das errechnete Feld noch nicht. Wenn HAVING berücksichtigt wird, ist die Abfrage schon durch und es gibt das errechnete Feld in der Ergebnismenge.
0

#4 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 17. Juni 2010 - 08:54

Ja, das ist mir dann auch aufgefallen als ich in mein schlaues Buch geschaut habe! :angry:
0

#5 Mitglied ist offline   FaceItReal 

  • Gruppe: aktive Mitglieder
  • Beiträge: 42
  • Beigetreten: 11. Januar 06
  • Reputation: 0

geschrieben 17. Juni 2010 - 09:25

Hi,

wie wäre denn ein ganz anderer Ansatz? HAVING ist sehr langsam und die DB muss einen vollständigen Tabellenscan durchführen. Mit Index auf datum wird dieser Query flutschen:

SELECT fid, YEAR(datum - INTERVAL 1 MONTH) AS jj
FROM wild
WHERE datum >= '2010-02-01' AND datum < '2011-02-01'
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0