2017-02-24 7 views
0

소매 가격이 특정 저자에게 가장 높은 모든 서적의 저자, ​​직위, 소매 및 소매 가격을 표시합니다.from 절에서 하위 쿼리를 사용하여이를 해결하는 방법은 무엇입니까?

아래 질문이 있습니다. 나는 from 절에서 하위 쿼리를 수행하는 방법과 다소 혼동 스럽습니다. 이하

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

이것은 에테르 해결할 수 제가

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

:

다른 방법 (및 author_id 값 변경, 당신의 특정 테이블의 컬럼 이름에 book_id)? – 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를 사용하지 마십시오. 이것은 학습자와 프로그래머 모두에게 나쁜 참여 방법입니다. 사용중인 데이터베이스

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