2014-07-10 15 views
5

Ich habe erste Tabelle mit dem Namen „Aufträge“ und 2. Tabelle mit dem Namen „Details“Mysql LEFT JOIN und SUM und zeigt 0 statt NULL

orders : 
order_id 
1 
2 
3 

details : 
id | order_id | qty 
1 | 1  | 2 
2 | 1  | 3 

Wie kann ich wie folgt?

order_id | total 
1  | 5 
2  | 0 
3  | 0 

habe ich versucht, diese Abfrage aber nicht funktioniert hat:

SELECT *, SUM(qty) AS total 
FROM order o 
LEFT JOIN details d 
    ON o.order_id = d.order_id 

Antwort

7

Try this:

SELECT o.order_id, IFNULL(SUM(d.qty),0) AS total 
FROM orders o 
    LEFT JOIN details d ON o.order_id = d.order_id 
GROUP BY order_id 
+0

Vielen Dank, ich bin berührt ... –

+0

@MarcusAdams 'GROUP BY 1 'Gruppen von der ersten Spalte, nicht sehr groß lesbar, aber es funktioniert. – Arth

+0

@Art, gut zu wissen, aber auf jeden Fall verwirrend. –

5

Dies wird tun, was Sie fordern. Es wird die Nullen durch 0 ersetzen, wenn eine Bestellung ohne Detailaufzeichnung vorliegt.

SELECT o.order_id, 
    coalesce(sum(d.qty), 0) 
from orders o 
left join details d 
    on o.order_id = d.order_id 
group by o.order_id; 

Link to SQL Fiddle Example.

+0

+1. . . Verwendung des ANSI-Standards 'coalesce()'. SQL Fiddle Beispiel. Verwendung von Tabellenaliasen Mein einziger Vorschlag: Die Tabellen-Aliase sollten Tabellenkürzel sein, also bevorzuge ich "o" und "d" anstatt "a" und "b". –

+0

@GordonLinoff Danke. Ich habe das Beispiel aktualisiert und antworte nach deinem Vorschlag. – SQLChao