SQL

时间:2016-09-11 20:55:01

标签: mysql sql

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

使用fAuthorID和fAuthorName的tAuthors,接下来我有tBooks,其中包含fAuthorID,fPubID等等(想想只会使用其中一个)。并且tPublishers包含fPubID和fPubName。

所以我一直在努力列出所有拥有ID号为12的出版商出版图书的作者的姓名;按字母顺序列出作者姓名。我把字母部分缩小了,但似乎可以得到正确的作者名字。这是我得到的,但它只是拉了一个作者,我相信这里总共有7个作者,附有ID号12。

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

2 个答案:

答案 0 :(得分:2)

可能更容易进行加入。作者表通过作者ID连接到Books表,books表通过发布者ID连接到publishers表。一旦它们全部加入,您只需按照pub id和sort进行过滤。

 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;  

答案 1 :(得分:0)

您可以使用tBooks代替tPublishers进行以下查询:

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