【发布时间】:2011-09-15 01:28:18
【问题描述】:
这是我的简单 SQL 问题...
我有两张桌子:
书籍
-------------------------------------------------------
| book_id | author | genre | price | publication_date |
-------------------------------------------------------
订单
------------------------------------
| order_id | customer_id | book_id |
------------------------------------
我想创建一个返回的查询:
--------------------------------------------------------------------------
| book_id | author | genre | price | publication_date | number_of_orders |
--------------------------------------------------------------------------
换句话说,返回 Books 表中 ALL 行的每一列,以及一个名为“number_of_orders”的计算列,该列计算每本书在 Orders 表中出现的次数。 (如果订单表中没有一本书,则该书应列在结果集中,但“number_of_orders”应为零。
到目前为止,我想出了这个:
SELECT
books.book_id,
books.author,
books.genre,
books.price,
books.publication_date,
count(*) as number_of_orders
from books
left join orders
on (books.book_id = orders.book_id)
group by
books.book_id,
books.author,
books.genre,
books.price,
books.publication_date
几乎正确,但不完全正确,因为“number_of_orders”将为 1,即使一本书从未在 Orders 表中列出。此外,鉴于我缺乏 SQL 知识,我确信这个查询效率非常低。
编写此查询的正确方法是什么? (无论如何,这需要在 MySQL 上运行,所以我不能使用任何其他供应商特定的功能)。
提前致谢!
【问题讨论】: