在mySQL中使用返回的选择信息
在MySQL数据库中,我有两个连接表。一个表包含在mySQL中使用返回的选择信息,mysql,sql,Mysql,Sql,在MySQL数据库中,我有两个连接表。一个表包含人员详细信息,另一个表包含书籍详细信息。我想在数据库中搜索特定作者(principalWriter),并返回与之合作过的所有合著者(AdditionalWriter) 所以我用 SELECT books.additionalWriters, people.name FROM books INNER JOIN people ON books.principalWriter = people.personID WHERE pers
人员详细信息
,另一个表包含书籍详细信息
。我想在数据库中搜索特定作者(principalWriter
),并返回与之合作过的所有合著者(AdditionalWriter
)
所以我用
SELECT
books.additionalWriters,
people.name
FROM
books
INNER JOIN people ON books.principalWriter = people.personID
WHERE personID = 1;
这将返回作者使用附加作者ID编写的每本书
但是,如何使用这些返回的ID在名称表中查找各自的名称?我可以用一个查询来完成这项任务吗?尝试以下操作:
SELECT people.name FROM people WHERE personID in
(SELECT
books.additionalWriters,
FROM
books
INNER JOIN people ON books.principalWriter = people.personID
WHERE personID = 1);
请尝试以下操作:
SELECT people.name FROM people WHERE personID in
(SELECT
books.additionalWriters,
FROM
books
INNER JOIN people ON books.principalWriter = people.personID
WHERE personID = 1);
您需要再次将其加入到peoples表中。试试这个:
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
您需要再次将其加入到peoples表中。试试这个:
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
这里的问题不是查询本身,而是数据库设计。您应该有以下表格:
:将存储所有写入程序(主体或非主体)写入程序(*ID*,name)
:将存储所有书籍书籍(*ID*,名称)
:这将存储writer和图书之间的关系,并将指定该图书的作者是否为PrincipalWriters\u Books(*WriterID*,*BookID*,Principal)
Books
表中,但是如果一本书恰好由Principal Writer编写,您将无法使用该模式解决该问题
一旦您更新了设计,查询就会容易得多。这里的问题不是查询本身,而是数据库设计。您应该有以下表格:
:将存储所有写入程序(主体或非主体)写入程序(*ID*,name)
:将存储所有书籍书籍(*ID*,名称)
:这将存储writer和图书之间的关系,并将指定该图书的作者是否为PrincipalWriters\u Books(*WriterID*,*BookID*,Principal)
Books
表中,但是如果一本书恰好由Principal Writer编写,您将无法使用该模式解决该问题
更新设计后,查询将更加容易。additionalWriters返回什么?一个ID还是以逗号分隔的ID列表?
name
表的结构是什么?您的表似乎不在1NF中。AdditionalWriter返回许多由空格分隔的ID。我应该更清楚的是,additionalWriters
返回了什么?一个ID还是以逗号分隔的ID列表?name
表的结构是什么?您的表似乎不在1NF中。AdditionalWriter返回许多由空格分隔的ID。我应该更清楚这很接近,除非它只返回附加编写器的名字和ID。每本书都有一些额外的作者。我应该说得更清楚些。编辑:上面的注释这是关闭的,除非它只返回附加编写器的名字和ID。每本书都有一些额外的作者。我应该说得更清楚些。编辑:以上评论