你好我为开发者开发新项目......这个开发系统项目保存了该出版商的所有书籍............... 我们有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
现在,如果他是主要作者或合着者,我可以如何为特定作者翻阅所有书籍
答案 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以避免同一本书的多行。