Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mySQL中使用返回的选择信息_Mysql_Sql - Fatal编程技术网

在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

在MySQL数据库中,我有两个连接表。一个表包含
人员详细信息
,另一个表包含
书籍详细信息
。我想在数据库中搜索特定作者(
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*,名称)
    :将存储所有书籍
  • Writers\u Books(*WriterID*,*BookID*,Principal)
    :这将存储writer和图书之间的关系,并将指定该图书的作者是否为Principal
主键由星号包围

注意:您也可以删除Principal字段并将其添加到
Books
表中,但是如果一本书恰好由Principal Writer编写,您将无法使用该模式解决该问题


一旦您更新了设计,查询就会容易得多。

这里的问题不是查询本身,而是数据库设计。您应该有以下表格:

  • 写入程序(*ID*,name)
    :将存储所有写入程序(主体或非主体)
  • 书籍(*ID*,名称)
    :将存储所有书籍
  • Writers\u Books(*WriterID*,*BookID*,Principal)
    :这将存储writer和图书之间的关系,并将指定该图书的作者是否为Principal
主键由星号包围

注意:您也可以删除Principal字段并将其添加到
Books
表中,但是如果一本书恰好由Principal Writer编写,您将无法使用该模式解决该问题


更新设计后,查询将更加容易。

additionalWriters返回什么?一个ID还是以逗号分隔的ID列表?
name
表的结构是什么?您的表似乎不在1NF中。AdditionalWriter返回许多由空格分隔的ID。我应该更清楚的是,
additionalWriters
返回了什么?一个ID还是以逗号分隔的ID列表?
name
表的结构是什么?您的表似乎不在1NF中。AdditionalWriter返回许多由空格分隔的ID。我应该更清楚这很接近,除非它只返回附加编写器的名字和ID。每本书都有一些额外的作者。我应该说得更清楚些。编辑:上面的注释这是关闭的,除非它只返回附加编写器的名字和ID。每本书都有一些额外的作者。我应该说得更清楚些。编辑:以上评论