2014-07-10 14 views
5

tôi đã bàn đầu tiên có tên là "đơn đặt hàng" và bảng thứ 2 có tên là "chi tiết"Mysql LEFT JOIN và SUM và hiển thị 0 thay vì NULL

orders : 
order_id 
1 
2 
3 

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

Làm thế nào để hiển thị như sau?

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

tôi đã cố gắng truy vấn này, nhưng đã không làm việc:

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

Trả lời

7

Hãy thử điều này:

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

Cảm ơn bạn, tôi rất cảm động ... –

+0

@MarcusAdams 'GROUP BY 1' nhóm theo cột đầu tiên, không phải cực kỳ rõ nét, nhưng nó hoạt động. – Arth

+0

@Arth, tốt để biết, nhưng chắc chắn khó hiểu. –

5

này sẽ làm những gì bạn đang yêu cầu. Nó sẽ thay thế các null bằng 0 nếu có một lệnh không có bản ghi chi tiết.

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. . . Sử dụng tiêu chuẩn ANSI 'coalesce()'. Ví dụ về SQL Fiddle. Sử dụng bí danh bảng. Đề xuất duy nhất của tôi: các bí danh bảng phải là các từ viết tắt của bảng, vì vậy tôi thích 'o' và' d' hơn là 'a' và' b'. –

+0

@GordonLinoff Cảm ơn. Tôi đã cập nhật ví dụ và câu trả lời theo đề xuất của bạn. – SQLChao

Các vấn đề liên quan