Einfache und schnelle Frage, ich habe diese Tabellen:Inner Join mit count() auf drei Tabellen
//table people
| pe_id | pe_name |
| 1 | Foo |
| 2 | Bar |
//orders table
| ord_id | pe_id | ord_title |
| 1 | 1 | First order |
| 2 | 2 | Order two |
| 3 | 2 | Third order |
//items table
| item_id | ord_id | pe_id | title |
| 1 | 1 | 1 | Apple |
| 2 | 1 | 1 | Pear |
| 3 | 2 | 2 | Apple |
| 4 | 3 | 2 | Orange |
| 5 | 3 | 2 | Coke |
| 6 | 3 | 2 | Cake |
Ich brauche eine Abfrage haben alle Menschen die Auflistung, zählen die Anzahl der Aufträge und die Gesamt Anzahl der Artikel, wie diese:
| pe_name | num_orders | num_items |
| Foo | 1 | 2 |
| Bar | 2 | 4 |
Aber ich kann es nicht funktionieren lassen! Ich versuchte
SELECT
people.pe_name,
COUNT(orders.ord_id) AS num_orders,
COUNT(items.item_id) AS num_items
FROM
people
INNER JOIN orders ON (orders.pe_id = people.pe_id)
INNER JOIN items ON items.pe_id = people.pe_id
GROUP BY
people.pe_id;
Aber dies gibt die num_*
Werte falsch:
| name | num_orders | num_items |
| Foo | 2 | 2 |
| Bar | 8 | 8 |
Ich habe bemerkt, dass, wenn ich versuche, eine Tabelle zur Zeit zu verbinden, funktioniert es:
SELECT
people.pe_name,
COUNT(orders.ord_id) AS num_orders
FROM
people
INNER JOIN orders ON (orders.pe_id = people.pe_id)
GROUP BY
people.pe_id;
//give me:
| pe_name | num_orders |
| Foo | 1 |
| Bar | 2 |
//and:
SELECT
people.pe_name,
COUNT(items.item_id) AS num_items
FROM
people
INNER JOIN items ON (items.pe_id = people.pe_id)
GROUP BY
people.pe_id;
//output:
| pe_name | num_items |
| Foo | 2 |
| Bar | 4 |
Wie Kombinieren Sie diese beiden Abfragen in einem?
Ihre Tabellen müssen wirklich neu organisiert werden. Die Artikeltabelle sollte nicht auf die Auftragstabelle und schon gar nicht auf die Personentabelle verweisen, und Sie benötigen eine neue Tabelle für eine Viele-zu-Viele-Beziehung wie Aufträge und Artikel. –
Warum sollte er ein Viele-zu-Viele brauchen, wenn eine Bestellung nur einer Person gehören kann? Sein Modell macht durchaus Sinn. –
@adam: Ich verstehe Ihren Vorschlag nicht. Dann ist nur die nutzlose ID, die ich sehe, die pe_id in der Items-Tabelle, aber vielleicht könnte sie in Zukunft nützlich sein, um die gesamten Items eines People zu erhalten, ohne der Order-Tabelle beizutreten. Was meinen Sie mit "Die Artikeltabelle sollte nicht auf die Bestellung verweisen"? – Strae