1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Verschachtelte Abfrage über 3 Tabellen

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von jabjab2, 3 Oktober 2018.

  1. jabjab2

    jabjab2 Neuer Benutzer

    Hallo,

    ich habe ein Problem bei einer verschachtelten Abfrage.
    Es gibt 3 Tabellen
    orders_products
    gutschriften_products
    products

    Ich möchte abfragen, welche Artikel wie oft verkauft / retourniert werden.
    Leider gibt mein Ansatz nur die Artikel aus, die verkauft UND auch mal retourniert wurden.
    Artikel, die NIE verkauft oder NIE retourniert wurden werden nicht angezeigt.
    Wo liegt der Fehler?

    "SELECT products_quantity, P.products_date_added, A.products_id, A.products_name, products_ek AS EK
    FROM ( select products_id, products_name, sum(products_quantity) as verkauft from orders_products group by products_id ) AS A
    JOIN ( select final_price, products_id, products_name, sum(products_quantity) as gutschrift from gutschriften_products where final_price > 0 group by products_id) AS B
    ON A.products_id=B.products_id
    JOIN (select products_id,products_status,manufacturers_id,products_quantity,products_ek,products_price from products) AS P ON P.products_id = B.products_id order by ".$db_orderby." ".$sorted.", products_id"

    Mit Joins habe ich leider nicht so viel Erfahrung.

    Danke schonmal für die Hilfe
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Dein Problem kommt schon vor den JOIN's:

    Code:
    select products_id, products_name, sum(products_quantity) as verkauft from orders_products group by products_id
    
    und

    Code:
    select final_price, products_id, products_name, sum(products_quantity) as gutschrift from gutschriften_products where final_price > 0 group by products_id
    
    z.B. sind syntaktisch falsch, was MySQL aber nicht erkennt und statt dessen falsche (!) Ergebnisse liefert. In Abfragen mit Aggregationen wie z.B. sum() müssen alle Spalten im Result entweder aggregiert oder gruppiert sein.
     
  3. akretschmer

    akretschmer Datenbank-Guru

    Ansonsten suchst Du z.B. einen LEFT JOIN mit Prüfung auf NULL.
     
  4. jabjab2

    jabjab2 Neuer Benutzer

    also müsste ich im ersten select zusätzlich group by verkauft und im zweiten group by gutschrift hinzufügen?
     
  5. akretschmer

    akretschmer Datenbank-Guru

    Schaue Dir einfach an, welche Spalten im Result sind. Prüfe, ob diese durch eine Aggregatsfunktion gebildet werden. Falls nein, gruppiere danach. Simpel, oder?
     
  6. jabjab2

    jabjab2 Neuer Benutzer

    Habe es gerade getestet. Leider ist es wohl zu simpel für mich.
    Ich habe es so gemacht, erhalten jetzt aber doppelte Ergebnisse.
     
  7. akretschmer

    akretschmer Datenbank-Guru

    was hast Du gemacht?
     
  8. jabjab2

    jabjab2 Neuer Benutzer

    verkauft und gutschrift wurden aus "sum()" erstellt.
    Daher habe ich dann
    select products_id, products_name, sum(products_quantity) as verkauft from orders_products group by products_id, products_quantity
    und
    select final_price, products_id, products_name, sum(products_quantity) as gutschrift from gutschriften_products where final_price > 0 group by products_id, products_quantity

    Habe ich es zu einfach gemacht?
     
  9. akretschmer

    akretschmer Datenbank-Guru

    beachte #3
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden