mysql - SQL 中的子查询困惑

标签 mysql sql

只使用一个基本的 SQL 程序来运行一些小东西,所以答案应该非常简单和小。但是数据库中有几个表,其中一个被标记为:

tAuthors 具有 fAuthorID 和 fAuthorName,接下来我有 tBooks 具有 fAuthorID 、 fPubID .... 等(认为只会使用这两者之一)。并拥有具有 fPubID 和 fPubName 的 tPublishers。

所以我一直在尝试做的是列出拥有 ID 号为 12 的出版商出版的书籍的所有作者的姓名;按字母顺序列出作者姓名。我记下了字母部分,但似乎可以得到正确的作者姓名。这是我得到的,但它只拉了一位作者,我相信这里总共有 7 位作者,ID 号为 12。

 SELECT `fAuthorName`, `fAuthorID`
 FROM `tAuthors`
 WHERE `fAuthorID` IN (
     SELECT `fPubID`
     FROM `tPublishers`
     WHERE `fPubID` = 12
 )
 ORDER BY `fAuthorName` ASC;      

最佳答案

加入可能会更容易。作者表通过作者 id 连接到图书表,图书表通过出版商 id 连接到出版商表。一旦它们全部加入,您就可以按 pub id 进行过滤并排序。

 SELECT `a.fAuthorName`, `a.fAuthorID`
 FROM `tAuthors` a
 JOIN `tBooks` b ON (a.fAuthorID = b.fAuthorID )
 JOIN `tPublishers` p ON (b.fPubID = p.fPubID)
 WHERE `p.fPubID` = 12
 ORDER BY `a.fAuthorName` ASC;  

关于mysql - SQL 中的子查询困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39440564/

相关文章:

MySQL - 如果不存在则创建用户

mysql - 关系表设计: prevent circular references

php - mysql_list_fields 包括 TABLE_PREFIX

mysql - 如何连接来自两个不同主机的两个 docker 容器?

php - 如何在 codeigniter 中创建用户时创建空行

PHP Web服务将数据插入数据库

java - 使用Java获取MySQL表中的所有主键

如果乘以零,MYSQL 避免 SELECT 计算

sql - 使用通配符选择 PostgreSQL 中的多列

mysql - 计数显示不正确?