Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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查询,检索所有从未出版过网络书籍的出版商名称 架构是: publisher(pubisherid,publishername) publishedby(bookdescid*,publisherid*,role) subject(subjectid,subjecttype) book(bookdescid,title,subtitle,edition,voltitle,volnumber,language,place,year,isbn,dewey,subjectid*

我想写一个mysql查询,检索所有从未出版过网络书籍的出版商名称

架构是:

publisher(pubisherid,publishername)

publishedby(bookdescid*,publisherid*,role)

subject(subjectid,subjecttype)

book(bookdescid,title,subtitle,edition,voltitle,volnumber,language,place,year,isbn,dewey,subjectid*)

writenby(bookdescid*,authorid*,role)

author(authorid,firstname,middlename,lastname)

请尝试以下操作,其中具有相同publishername的两个或多个publisherid值仍被视为不同的发布者

SELECT publisherid,
       publishername
FROM publisher
WHERE publisherid NOT IN ( SELECT DISTINCT publisherid
                           FROM publisher
                           JOIN publishedby ON publisher.publisherid = publishedby.publisherid
                           JOIN book ON book.bookdescid = publishedby.bookdescid
                           JOIN subject ON subject.subjectid = book.subjectid
                           WHERE subject.subjecttype = 'Networking' );
SELECT DISTINCT publishername
FROM publisher
WHERE publishername NOT IN ( SELECT DISTINCT publishername
                             FROM publisher
                             JOIN publishedby ON publisher.publisherid = publishedby.publisherid
                             JOIN book ON book.bookdescid = publishedby.bookdescid
                             JOIN subject ON subject.subjectid = book.subjectid
                             WHERE subject.subjecttype = 'Networking' );
这个答案的工作原理是使用内部选择查询来选择一个列表,其中列出了每一位出版过网络书籍的出版商。联接创建一个表,其中列出了每个出版商出版的每本书及其主题。WHERE条款将其仅限于那些关于网络的书籍。由于该出版商可能有许多此类书籍,因此可以选择其publisherid的许多实例。通过在构成此列表的SELECT语句的初始部分中应用DISTINCT BEFOR publisherid,我们可以为每个发布服务器获得一个实例

外部查询将内部查询的列表与Publisher表进行比较,并返回内部查询结果中不存在的publisherid的所有值,从而为我们提供一个尚未出版网络书籍的所有出版商的列表


请尝试以下操作,其中一个发布者可以有多个publisherid值,但只能有一个publishername值,该值不与其他发布者共享

SELECT publisherid,
       publishername
FROM publisher
WHERE publisherid NOT IN ( SELECT DISTINCT publisherid
                           FROM publisher
                           JOIN publishedby ON publisher.publisherid = publishedby.publisherid
                           JOIN book ON book.bookdescid = publishedby.bookdescid
                           JOIN subject ON subject.subjectid = book.subjectid
                           WHERE subject.subjecttype = 'Networking' );
SELECT DISTINCT publishername
FROM publisher
WHERE publishername NOT IN ( SELECT DISTINCT publishername
                             FROM publisher
                             JOIN publishedby ON publisher.publisherid = publishedby.publisherid
                             JOIN book ON book.bookdescid = publishedby.bookdescid
                             JOIN subject ON subject.subjectid = book.subjectid
                             WHERE subject.subjecttype = 'Networking' );
id字段通常被视为实体的唯一标识符,并且往往具有更适合唯一标识符的形式,即INT、短字符串等,其他字段可以用作实体的唯一标识符。我已经修改了我的第一条语句,以便publishername作为单个发布者的唯一标识符

publisherid已从要选择的字段列表中删除,因为您只要求提供发布者名称列表,而不需要添加字段,这些字段将提供有关该发布者的更多信息

WHERE/NOT IN comparison的字段也已更改为publishername。这将消除具有publishername/publishername组合的记录,如果该publishername与其他地方的网络书籍相关联,则该组合没有与之关联的网络书籍,以及具有与之关联的网络书籍的组合

需要在本语句开头的publishername选择中添加DISTINCT,否则具有多个publisherid值的发布者将被多次列出。同样的效果也可以通过删除DISTINCT并将ORDER by publishername添加到语句末尾,但就在;之前来实现


如果您有任何问题或评论,请随时发表相应的评论。

您肯定尝试过一些东西。您要求我们做作业的原因是什么?请参阅要提高问题的质量,请显示出版商、出版社、主题和书籍的示例数据,以及您期望样本数据产生的输出。此外,我建议您要么删除Writenby和author,要么更好地解释它们与手头的特定问题的关系。我在这篇文章中得到了额外的10行?如果您得到了额外的10行并询问原因,如果您描述它们会有所帮助-它们是重复的值还是其他突出的值?我可以尝试创建我自己的样本数据集,并尝试针对该数据集测试我的语句,但在不了解您正在使用的数据的情况下,我无法保证能够复制您遇到的问题。根据我对你问题的评论,如果你能提供一个示例数据集来说明这个问题,那么我和其他人将能够更好地测试我们的代码。您是否有不同的publisherid值和publishername的相同值?是的,我有不同的publisherid值和publishername的相同值,其中两个或多个publisherid值共享一个对应的publishername,我们应该将他们视为不同的出版商,还是将他们视为同一个出版商?