首页 > 解决方案 > 在sql中列出多个表中的列

问题描述

我有一个这样形成的数据库:

BOOKTYPES ( book_type_id (PK), book_type )
CATEGORIES ( category_id (PK), category )
PUBLISHERS ( publisher_id (PK), publisher, speciality, country )
BOOKS ( book_id (PK), title, publisher_id (FK), published_year,
purchase_price, category_id (FK),purchase_date, pages, 
book_type_id(FK) )
AUTHORS ( author_id (PK), first_name, last_name, pseudonym )
AUTHORSHIP ( author_id (PK), book_id (PK) )

现在,我需要帮助的是列出类别和包含该类别的书籍数量。这意味着我需要从 CATEGORIES 中检索类别,并从书籍中检索 category_id。我面临的问题是 category_id 已经存在于类别中,这不是我想要检索的。

我真的很感激这方面的一些帮助,因为它已经让我的大脑思考了很长一段时间了。

标签: sqljoinselectgroup-by

解决方案


列出类别和包含该类别的书籍数量

这看起来像一个简单的聚合查询books

SELECT category_id, COUNT(*) count_of_books FROM books GROUP BY category_id

如果您还想要类别名称,您可以JOINcategories. 您可以通过在列名前加上它们所属的表(或表别名)来消除列名的歧义:

SELECT c.category, COUNT(*)
FROM books b
INNER JOIN categories c ON c.category_id = b.category_id
GROUP BY c.category_id, c.category

要过滤给定的类别计数,您可以使用HAVING子句:

SELECT c.category, COUNT(*)
FROM books b
INNER JOIN categories c ON c.category_id = b.category_id
GROUP BY c.category_id, c.category
HAVING COUNT(*) > 5

推荐阅读