需要帮助mysql的书籍系统 - where子句的问题

时间:2011-03-08 08:11:19

标签: sql

你好我为开发者开发新项目......这个开发系统项目保存了该出版商的所有书籍............... 我们有3张桌子 图书 作者 合着者

问题案例: ieach书有1个主要作者,作者可以在很多书中重播和ieach书在某些情况下可以有共同作者这个共同作者可以是1或2或3或12注释:这个共同作者已经保存在作者表中

realtionship: 作者和书籍之间的一对多

共同作者与书籍和作者之间的多对多

表#1 authors table =>表格包含所有作者 id - author_name

表#2 books table =>桌上拿着所有的书 id- title - author_id - publishing_year

表#3 co_authors table =>持有所有有很多共同作者的项目 item_id和authors_id

现在,如果他是主要作者或合着者,我可以如何为特定作者翻阅所有书籍

2 个答案:

答案 0 :(得分:1)

有两种方法可以解决这个问题......一种方法是使用UNION,例如:

SELECT id FROM books WHERE author_id = ?
UNION ALL
SELECT item_id FROM co_authors WHERE authors_id = ?

您可以解决此问题的另一种方法是重新编写数据库结构,以便books表中没有author_id,而是在co_authors中有一个名为main_author的标记或者其他类似的标记。考虑到你可能有书,其中不清楚主要作者是谁,这可能更有意义......

答案 1 :(得分:0)

您可以这样做:

SELECT DISTINCT books.*, authors.*
FROM books
LEFT JOIN co_authors ON co_authors.item_id = books.id
INNER JOIN authors ON 
        authors.id = books.author_id OR 
        authors.id = co_authors.author_id
WHERE authors.id = ID

如果您需要按名称而非ID搜索,where子句也可以写在authors.name = 'NAME'的位置。

编辑:添加了distinct以避免同一本书的多行。