Chris: MySQL: Filtern von Daten

Hi!

Nochmal ein MySQL-Problem. Kann man bei MySQL keine Unterabfragen machen, oder warum funktioniert das hier nicht:

SELECT bepr_name, SUM(bepr_anzahl) AS summe, AVG(bepr_preis) AS schnitt, be_nummer FROM shop_bestellteprodukte GROUP BY bepr_name HAVING be_nummer IN (SELECT be_nummer FROM shop_bestellungen WHERE status_id=3 OR status_id=5) ORDER BY summe DESC

Es handelt sich um 2 Tabellen. Eine beinhaltet Bestelldaten, die andere die bestellten Produkte. Es sollen nur die Produkte angezeigt werden, die in der dazugehörigen Bestellung des Status "3" bzw. "5" haben.

Danke für jede Hilfe!

  1. Moin!

    Hi!

    Nochmal ein MySQL-Problem. Kann man bei MySQL keine Unterabfragen machen, oder warum funktioniert das hier nicht:

    Schau in die Doku und finde es heraus (was übrigens immer eine gute Idee ist, bevor oder wenn man auf Probleme stößt): http://www.mysql.com

    Meines Wissens nach kann MySQL in Version 3 keine Subselects.

    - Sven Rautenberg

    --
    Diese Signatur gilt nur am Freitag.
    1. Meines Wissens nach kann MySQL in Version 3 keine Subselects.

      Das denke ich auch.

      Mich interessiert jedoch mehr, wie man das Problem anders lösen könnte.

      1. Moin!

        Meines Wissens nach kann MySQL in Version 3 keine Subselects.

        Das denke ich auch.

        Aha, warum fragst du dann, warum MySQL das nicht kann?

        Mich interessiert jedoch mehr, wie man das Problem anders lösen könnte.

        Warum stellst du diese Frage nicht gleich im ersten Posting?

        http://www.mysql.com/documentation/mysql/bychapter/manual_Introduction.html#ANSI_diff_Sub-selects

        - Sven Rautenberg

        --
        Diese Signatur gilt nur am Freitag.
        1. Aha, warum fragst du dann, warum MySQL das nicht kann?

          Weil ich mir mit "IN" nicht sicher war.

          Warum stellst du diese Frage nicht gleich im ersten Posting?

          Damit ich sie im 2. stellen kann.

          http://www.mysql.com/documentation/mysql/bychapter/manual_Introduction.html#ANSI_diff_Sub-selects

          Das hilft mir leider in meinem Fall auch nicht weiter.

  2. Hallo!

    Es handelt sich um 2 Tabellen. Eine beinhaltet Bestelldaten, die andere die bestellten Produkte. Es sollen nur die Produkte angezeigt werden, die in der dazugehörigen Bestellung des Status "3" bzw. "5" haben.

    Sollte das nicht über ein JOINs zu lösen sein? Subselects sind oft über JOINs zu lösen.

    Sunselects wird MySQL erst ab Version 4.1 geben. MySQL 4.0 befindet sich noch im Betastadium.
    http://www.mysql.de/products/mysql-4.0/index.html

    MfG, André Laugks
    L-Andre @ gmx.de

    1. Sollte das nicht über ein JOINs zu lösen sein? Subselects sind oft über JOINs zu lösen.

      Ich hatte es so mal versucht:

      SELECT bepr_name, SUM(bepr_anzahl) AS summe, AVG(bepr_preis) AS schnitt, be_nummer FROM shop_bestellteprodukte GROUP BY bepr_name LEFT JOIN shop_bestellungen ON shop_bestellteprodukte.be_nummmer=shop_bestellungen.be_nummer where shop_bestellungen.status_id =3 OR shop_bestellungen.status_id=5

      aber das klappt leider auch nicht...

      1. Hallo,

        SELECT bepr_name, SUM(bepr_anzahl) AS summe, AVG(bepr_preis) AS schnitt, be_nummer FROM shop_bestellteprodukte GROUP BY bepr_name LEFT JOIN shop_bestellungen ON shop_bestellteprodukte.be_nummmer=shop_bestellungen.be_nummer where shop_bestellungen.status_id =3 OR shop_bestellungen.status_id=5

        aber das klappt leider auch nicht...

        ... weil Du Dich nicht an die vorgeschriebene SQL-Syntax gehalten hast. Es gibt eine Reihenfolge, nach der die einzelnen Klauseln der SQL-Abfrage angeordnet sein müssen. Und GROUP BY hat definitiv vor dem JOIN nichts verloren.

        Grüße
          Klaus