2017-02-24 20 views
0

特定の著者の小売価格が最も高いすべての書籍の著者、タイトル、小売および小売価格を表示します。from句でサブクエリを使用してこれを解決するにはどうすればよいですか?

以下の質問があります。私はちょっとfrom文節でサブクエリを行う方法を混乱させる。以下

select lname, fname, title, retail 
from author natural join bookauthor 
natural join books 
where retail=(select max(retail) 
       from books); 

Iこれは内部ジョインエーテルを用いて解くことができる

FNAME  LNAME  TITLE        RETAIL 
---------- ---------- ------------------------------ ---------- 
SAM  SMITH  BODYBUILD IN 10 MINUTES A DAY  30.95 
LISA  PORTER  BODYBUILD IN 10 MINUTES A DAY  30.95 
JANICE  JONES  REVENGE OF MICKEY      22 
TAMARA  KZOCHSKY BUILDING A CAR WITH TOOTHPICKS  59.95 
TINA  PETERSON DATABASE IMPLEMENTATION    55.95 
JUAN  ADAMS  DATABASE IMPLEMENTATION    55.95 
JAMES  AUSTIN  DATABASE IMPLEMENTATION    55.95 
JACK  BAKER  COOKING WITH MUSHROOMS    19.95 
JAMES  AUSTIN  HOLY GRAIL OF ORACLE    75.95 
LISA  WHITE  HANDCRANKED COMPUTERS     25 
WILLIAM WHITE  HANDCRANKED COMPUTERS     25 
JANICE  JONES  E-BUSINESS THE EASY WAY    54.5 
ROBERT  ROBINSON PAINLESS CHILD-REARING    89.95 
OSCAR  FIELDS  PAINLESS CHILD-REARING    89.95 
JACK  BAKER  PAINLESS CHILD-REARING    89.95 
SAM  SMITH  THE WOK WAY TO COOK     28.75 
ROBERT  ROBINSON BIG BEAR AND LITTLE DOVE    8.95 
SAM  SMITH  HOW TO GET FASTER PIZZA    29.95 
WILLIAM WHITE  HOW TO MANAGE THE MANAGER   31.95 
LISA  WHITE  SHORTEST POEMS      39.95 

20 rows selected. 
+0

? – GurV

+0

@GurV私はJustLee Booksデータベースを使用しています。 –

答えて

1

と呼ばれていることを前提としている:

SELECT lname, fname, title, retail 
FROM author a 
INNER JOIN bookauthor ba 
ON a.id = ba.author_id 
INNER JOIN books b 
ON b.id = ba.book_id 
WHERE (ba.author_id, ba.retail) IN (
    SELECT ba1.author_id, MAX(b1.retail) 
    FROM books b1 
    INNER JOIN bookauthor ba1 
    ON ON b1.id = ba1.book_id 
    GROUP BY ba1.author_id 
    ); 

NATURE JOINを使用しないでください。これは、すべての学習者とプログラマーにとって、参加の悪い方法です。

(そしてAUTHOR_IDを変更、あなたの特定のテーブルの列名にbook_id)

その他の方法:

使用しているデータベース
SELECT lname, fname, title, retail 
FROM author a 
INNER JOIN bookauthor ba 
ON a.id = ba.author_id 
INNER JOIN books b 
ON b.id = ba.book_id 
INNER JOIN(
    SELECT ba1.author_id, MAX(b1.retail) retail 
    FROM books b1 
    INNER JOIN bookauthor ba1 
    ON ON b1.id = ba1.book_id 
    GROUP BY ba1.author_id 
    ) mr 
ON 
    ba.author_id = mr.author_id 
    AND ba.retail = mr.retail 
; 
+0

ありがとう!それを理解するのにはしばらく時間がかかりましたが、自然結合を使用しないでください。共通の列をタイプすることなく速くなったので、私はそれを使いました。 –

1

を使用しているデータベースからのデータである:

select lname, fname, title, retail 
from author natural join bookauthor 
natural join books 
inner join (select max(retail) as max_retail, authorid 
      from books 
      group by authorid) b 
on books.authorid = b.authorid and books.retail = b.max_retail 

または相関サブクエリ:

select lname, fname, title, retail 
from author natural join bookauthor 
natural join books 
where retail=(select max(retail) 
       from books b where b.authorid=author.authorid); 

natural joinを使用しているため、ジョインに使用した実際のカラム名を知ることは不可能です。したがって、私はあなたがこれを使用することができauthorid外部キーがauthorid

関連する問題