sql计数其他表中的引用

时间:2016-01-08 11:37:18

标签: sql

如果图书为0销售,则此查询未列出该图书。

但我真的需要它:)

如何解决这个问题?

Wrong value
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

2 个答案:

答案 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语法。

此外,表别名使查询更容易编写和阅读。