在mySQL中使用返回的SELECT信息

时间:2012-03-20 13:55:00

标签: mysql sql

在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在名称表中查找各自的名称?我可以做一个查询来完成这个吗?

3 个答案:

答案 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);