2016-10-02 8 views
1

私はいくつかのSQLリビジョンを行っています。「サブクエリを使用せずにジョインを使用し、心理学の書籍を発行するパブリッシャをリストアップする」というクエリを実行するはずです。この思い付いた:ジョインを使用してからサブクエリのみを使用しますか?

SELECT DISTINCT p.pub_name, t.category 
FROM publishers p 
INNER JOIN titles t 
ON p.pub_id=t.pub_id 
WHERE t.category='psychology'; 

次の部分は、サブクエリを使用して、それを行うことですが、私はあなたが使用しなくても、サブクエリ自体に参加していることだろうかわかりませんか?また、どのように私はすべての2番目の著者を印刷するだろうか?

linkはデータベースに貼り付けです。

これはスキーマです(私はスキーマではなく、割引テーブルに関してスキーマの問題を認識しています)。

答えて

5

あなたは、IN句を使用することができます。

SELECT 
    p.pub_name 
FROM 
    publishers p 
WHERE 
    p.pub_id IN (SELECT pub_id FROM titles t WHERE t.category = 'psychology) 

代わりに、もう少し複雑であるが、一般的にパフォーマンスが向上句をEXISTS:

SELECT 
    p.pub_name 
FROM 
    publishers p 
WHERE 
    EXISTS (SELECT 1 FROM titles t WHERE t.pub_id = p.pub_id AND t.category = 'psychology) 

毎秒作者を取得するには:

SELECT 
    a.au_fname, 
    a.au_lname 
FROM 
    publishers p 
JOIN 
    titles t ON t.pub_id = p.pub_id 
JOIN 
    title_author ta ON ta.title_id = t.title_id 
JOIN 
    authors a ON a.au_id = ta.au_id 
WHERE 
    t.category = 'psychology' 
    AND a.au_ord = 2 
+0

ああ、昨年、EXISTSを覚えています。 – Poena

+1

Np :-) 2番目の答えの最後のクエリを見て、必要なものが得られるかどうかを確認してください。私は走らなければならないが、助けてくれることを望む!また、この場合実際には必要であるかどうかわからないので、DISTINCTを省略していることがわかります。あなたが絶対に必要な場合にのみ使用してください。パフォーマンスヒットと読みやすくするために:-)実行しなければなりませんが、幸運があり、素晴らしい一日を! – vanlee1987

関連する問題