2011-12-31 101 views
0

我有一个数据库,我无法弄清楚如何获取图书数据。我会解释我之前是如何做到的,以及我现在计划如何做到这一点。获取多个子表的条目

为了简单起见,我将采用“书籍”示例,因为它是最容易展现关系的示例。之前,我有这个结构,我发现沉重的DB:

Books: 
book_id 
title 
author_name 
genre_name 

很容易按流派查询个人的书籍,所有书籍,书籍作者和书籍。这里的问题是我需要获取作者或流派的列表。我必须选择ALL书籍,在将它们交给浏览器之前检测可能的重复,相同,唯一性等。我已经感觉到处理的滞后。

所以我现在要做的是这样的:我有3个表格,一个用于书本,另一个用于作者,另一个用于流派。

Books:  Authors:  Genre: 
book_id  author_id  genre_id 
title  author_name genre_name 
author_id 
genre_id 

这种方式,我可以通过author_idgenre_id更快,而不影响“的作者获得”和“流派获得”标记的书籍以及轻松搞定所有作者和流派。此外,我可以通过更改author_idgenre_id来轻松更改书籍作者和/或流派。

但是如果我选择一本书,当正常的select * from Books where book_id=something只返回流派和作者的ID时,我该如何做?我如何做它返回作者姓名和流派名称?子查询?一个单独的查询?或者实际上是否存在我不知道的单行查询?

回答

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; 
+0

已经完成了区别,但它仍然是处理所有书籍以获得不同作者列表的拖拽。 – Joseph 2011-12-31 01:49:43

+0

@fskreuz酷:-)只是给你的选择,如果你不知道 – 2011-12-31 01:52:59