2016-09-11 7 views
0

ここに質問があります...ちょっとしたものを動かすための基本的なSQLプログラムを使って、答えはかなりシンプルで小さくなければなりません。しかし、テーブルの数が2つのデータベースにはラベルが付けられています:SQLのサブクエリの混乱

tAuthors with fAuthorID and fAuthorName、次に私はfAuthorID、fPubID ....などのtBooksを持っています。 fPubIDとfPubNameを持つtPublisherを持っています。

私がしようとしているのは、ID番号12の出版社が出版した本を持つすべての著者の名前をリストすることです。著者名はアルファベット順に並べます。私はアルファベットの部分を削除しましたが、正しい作者の名前を得るように見えるかもしれません。これは私が持っているものですが、それは1人の著者を引っ張っているだけです。私はここに7人の著者が、ID番号12を付けて合計していると信じています。

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

素晴らしい方法で私を正しい方向に導くことができるものはどれもあります。

答えて

0

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

もっと簡単に参加できます。 Authorsテーブルは著者IDによってBooksテーブルに接続し、booksテーブルはパブリッシャIDによってpublishersテーブルに接続します。それらがすべて参加したら、あなたはパブIDと並べ替えでフィルタリングできます。あなたが代わりにtPublishersのtBooksを使用して次のクエリでそれを行うことができます

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; 
+0

は偉大な唯一のものは、我々は単に「WHERE」のための「結合」を使用するポイントになったhaventはなり見えます今。 – Dewie