如果图书为0销售,则此查询未列出该图书。
但我真的需要它:)
如何解决这个问题?
Wrong value
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
答案 0 :(得分:2)
您需要外部联接:
SELECT description,
author,
count(sales.book_id) as "amount of sales"
FROM books
LEFT JOIN sales ON books.id = sales.book_id
GROUP BY books.id;
外部联接将返回所有书籍。对于没有销售的图书,sales
表中的所有列都将为空。由于聚合函数忽略空值,count(sales.book_id)
将为那些尚未售出的图书返回零。
这也是一个很好的例子,为什么不应再使用where
子句中旧的,过时的隐式连接:你不能使用该语法编写外连接。
答案 1 :(得分:1)
您需要left join
:
SELECT b.description, b.author, count(s.book_id) as NumSales
FROM books b left join
sales s
ON b.id = s.book_id
GROUP BY b.id;
通常,您应始终使用显式JOIN
语法。简单规则:从不在FROM
子句中使用逗号。 始终使用明确的JOIN
语法。
此外,表别名使查询更容易编写和阅读。