Tôi có một bảng mục và tôi có một bảng riêng chứa các giao dịch mua riêng lẻ của mỗi mục. Không phải mọi mặt hàng đã được mua. Tôi chọn số lượng mua và tham gia nó với bảng mục có một tuyên bố tương tự như sau:Đặt giá trị mặc định trên cột NULL từ LEFT JOIN và lọc bằng WHERE
SELECT items.name, purchases_count
FROM `items`
LEFT JOIN (SELECT sales.item_name, SUM(unit_sales) AS purchases_count
FROM sales GROUP BY item_name) sales ON sales.item_name = items.uid
Điều này dẫn đến dữ liệu tương tự như:
+------+-----------------+
| name | purchases_count |
|------+-----------------+
| Shoe | 12 |
| Belt | NULL |
+------+-----------------+
Vấn đề của tôi nảy sinh khi tôi muốn lọc kết quả này trên purchases_count
. Nếu tôi sử dụng WHERE purchases_count < 10
hoặc một cái gì đó tương tự, các mặt hàng không có hồ sơ bán hàng nào cả (nghĩa là các mặt hàng có giá trị NULL
) bị loại trừ khỏi tìm kiếm.
Tôi đã cố gắng sử dụng COALESCE(purchases_count,0) AS purchases_count
, thiết lập chính xác NULL
bản ghi thành 0, nhưng chúng vẫn không xuất hiện khi sử dụng WHERE
. Tôi nghi ngờ số COALESCE
đang diễn ra sau WHERE
.
Tôi muốn có thể lọc số này bằng cách sử dụng WHERE
và bao gồm kết quả NULL
(dưới dạng số không) nếu có thể. Bất kỳ đề xuất?
'bí danh' của bảng nối trái giống với tên bảng, có thực hành tốt không ?? – diEcho
Truy vấn SQL đã được đơn giản hóa chỉ để tập trung vào câu hỏi, SQL thực tế khác với điều này. –