我有一个数据库,我无法弄清楚如何获取图书数据。我将解释我之前是如何做到的以及我现在打算如何做到这一点。
为了简单起见,我将采用“书籍”的例子,因为它最容易显示这种关系。之前,我有这个结构,我发现DB很重:
Books:
book_id
title
author_name
genre_name
通过流派查询个人书籍,所有书籍,作者书籍和书籍都很容易。这里的问题是我需要获得作者或流派的列表。在将它们交给浏览器之前,我必须选择所有书籍,检测可能的重复,相同,独特等。我已经感觉到处理的滞后。
所以我现在打算做的是:我有3张桌子,一张用于书籍,另一张用于作者,另一张用于流派。
Books: Authors: Genre:
book_id author_id genre_id
title author_name genre_name
author_id
genre_id
通过这种方式,我可以按author_id
和genre_id
标记书籍,并且可以更快地轻松获取所有作者和流派,而不会影响“按作者获取”和“按流派”。此外,我可以通过更改author_id
和genre_id
轻松更改图书作者和/或流派。
但如果我选择了一本书,那么当正常select * from Books where book_id=something
只返回流派和作者的ID时,我该怎么做呢?我怎么做才能返回作者姓名和流派名称?子查询?一个单独的查询?或者实际上是否存在我不知道的单线查询?
答案 0 :(得分:4)
你需要使用INNER JOIN,这样你就可以做这样的事情
SELECT b.book_id, b.title, a.author_name, g.genre_name FROM Books
INNER JOIN Authors a ON b.author_id=a.author_id
INNER JOIN Genre g ON b.genre_id=g.genre_id
WHERE book_id=12
作为替代方案,如果您不想创建单独的表(顺便说一句,这是一个好的设计),您可以使用DISTINCT查询
SELECT DISTINCT author_name FROM Books;