Verschachtelte Abfrage über 3 Tabellen

jabjab2

Neuer Benutzer
Beiträge
4
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
 
Werbung:
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.
 
Schaue Dir einfach an, welche Spalten im Result sind. Prüfe, ob diese durch eine Aggregatsfunktion gebildet werden. Falls nein, gruppiere danach. Simpel, oder?
 
Habe es gerade getestet. Leider ist es wohl zu simpel für mich.
Ich habe es so gemacht, erhalten jetzt aber doppelte Ergebnisse.
 
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?
 
Werbung:
Zurück
Oben