Problem mit Query

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit Query

    Hallo,

    kann mir jemand sagen, warum MySQL bei diesem Query der 'bestand' im where-clause nicht bekannt ist, obwohl ich ihn im SELECT-Teil des Querys ermittelt habe?

    MySQL-Fehlermeldung:
    Code:
    Unknown column 'bestand' in 'where clause'
    Code:
    SELECT
     lago.artikel.id AS artikelid, lago.artikel.artikelname,
     lago.artikel.mindestmenge AS mindestmenge,
     IFNULL((SELECT SUM(menge) FROM wareneingang WHERE artikel=artikelid), 0) - 
    IFNULL((SELECT SUM(menge) FROM warenausgang WHERE artikel=artikelid), 0) AS bestand,
     lago.artikel.artnr,
     lago.artikel.artnr2,
     lago.artikel.laenge,
     lago.artikel.breite,
     lago.artikel.tiefe_staerke,
     lago.artikel.durchmesser,
     lago.artikel.werkstoff,
     lago.artikel.oberflaeche,
     phprojekt.contacts.firma AS kre_firma,
     phprojekt.contacts.abteilung AS kre_abteilung,
     phprojekt.contacts.nachname AS kre_nachname,
     phprojekt.contacts.vorname AS kre_vorname,
     phprojekt.contacts.stadt AS kre_stadt,
     lago.artikel.lagerort,
     lago.artikel.liefprodnr,
     lago.einheiten.kurzform 
    FROM
     lago.artikel 
    INNER JOIN
     phprojekt.contacts 
    ON
     (lago.artikel.kreditor=phprojekt.contacts.ID) 
    INNER JOIN
     lago.einheiten 
    ON
     (lago.artikel.einheit=lago.einheiten.id) 
    WHERE
     lago.artikel.deleted!=1 
    AND
     artnr IS NOT NULL 
    AND
     lago.artikel.artnr BETWEEN 80000 AND 89999 
    AND
     bestand < mindestmenge 
    ORDER BY
     artnr ASC,
     artnr2 ASC
    Der 'bestand' wird aber richtig ausgegeben, wenn ich die betreffende where-Klausel weglasse (also ohne "AND
    bestand < mindestmenge").

    Noch was Interessantes: Wenn ich die betreffende where-Klausel weglasse, dafür aber nach 'bestand' sortieren lasse, dann funktionier die Abfrage (also mit ..."ORDER BY bestand ASC"). In diesem Fall kennt er 'bestand', nur eben in der where-Klausel nicht.

    Kann mir jemand weiterhelfen!?
    Viele Grüsse
    Jan

  • #2
    schau mal ins Manual:
    It is not allowed to use a column alias in a WHERE clause, because the column value may not yet be determined when the WHERE clause is executed. See section A.5.4 Problems with alias.

    Also bleibt Dir deine
    Where so zu machen:
    AND IFNULL((SELECT SUM(menge) FROM wareneingang WHERE artikel=artikelid), 0) -
    IFNULL((SELECT SUM(menge) FROM warenausgang WHERE artikel=artikelid), 0) < mindestmenge
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      Danke MelloPie. So habe ich es auch gemacht.
      Ich dachte, dass ich auf die andere Art (so wie es ja leider nicht geht) Rechenaufwand spare, da die Abfrage durch die beiden Sub-Selects sehr langsam ist.
      Dann bleibe ich aber wohl bei deiner Lösung.

      Danke für die Mühe!
      Jan

      Kommentar

      Lädt...
      X