我正在尝试从两个单独的表中获取产品的名称和销售数量。

我的表看起来像这样:

BOOK
Book_ID | Book_Title | Book_Author

SOLD
Transaction_ID | Book_ID | Customer_ID

我可以从以下查询中获得大部分想要的结果
SELECT b.Book_Title, COUNT(s.Book_ID) FROM Book b, Sold s
WHERE b.Book_ID = s.Book_ID
GROUP BY b.Book_Title;

但是,这仅显示具有至少一次销售的产品。我想显示所有产品,如果未发生销售,则仅显示零。我一直在搞这样的事情:
SELECT b.Book_Title,
       COUNT(CASE WHEN s.Book_ID IS NULL THEN 0 ELSE s.Book_ID END)
FROM Book b, Sold s WHERE b.Book_ID = s.Book_ID GROUP BY Book_Title;

但是WHERE子句将结果限制为销售1个或更多的结果。

有人可以建议解决此问题的方法吗?我正在使用Oracle 10g。

谢谢

最佳答案

使用左外部联接:

SELECT b.Book_Title, COUNT(s.Book_ID)
FROM Book b left outer join Sold s on b.Book_ID = s.Book_ID
GROUP BY b.Book_Title;

09-27 14:02