在MySQL数据库中,我在连接中链接了两个表。一个表包含people details
和另一个book details
。我想在数据库中搜索特定作者(principalWriter
)并返回他们使用过的所有共同作者(additionalWriters
)。
所以我用
SELECT
books.additionalWriters,
people.name
FROM
books
INNER JOIN people ON books.principalWriter = people.personID
WHERE personID = 1;
这将返回作者使用附加编写者ID的每本书。
但是,如何使用这些返回的ID在名称表中查找各自的名称?我可以做一个查询来完成这个吗?
答案 0 :(得分:2)
这里的问题不是查询本身,而是数据库设计。你应该有这个表:
Writers(*ID*, name)
:将存储所有作者(校长与否)Books(*ID*, name)
:将存储所有图书Writers_Books(*WriterID*, *BookID*, Principal)
:这将存储作者和书籍之间的关系,并指定该书的作者是否为校长主键由星号
包围注意:您也可以删除Principal字段并将其添加到Books
表中,但如果一本书恰好有主要编写者,那么您将无法使用该模式解决该问题。
更新设计后,查询将变得更加容易。
答案 1 :(得分:1)
您需要再次将其加入人员表。试试这个:
SELECT a.AdditionalWriters, c.name, b.name
FROM books a INNER JOIN people b ON
a.PrincipalWriter = b.personID
INNER JOIN people c ON a.additionalWriters = c.PersonID
WHERE b.PersonID = 1
答案 2 :(得分:0)
尝试以下方法:
SELECT people.name FROM people WHERE personID in
(SELECT
books.additionalWriters,
FROM
books
INNER JOIN people ON books.principalWriter = people.personID
WHERE personID = 1);