2014-01-27 4 views
3

У меня простой вопрос SQL.SQL простой запрос вопроса

У меня есть 3 таблицы

Books 
-------------------- 
Book_ID(pk) | Title | Price 
-------------------- 

Clients 
--------------------- 
Client_ID(pk) | Name | 

CardsOfReaders 
--------------------- 
Book_ID(pk,fk)| Client_ID(pk, fk) 

Таким образом, вопрос: Как отобразить имя читателя, заимствованные книгу с самой высокой ценой (и ценой колонки, которые будут отображаться, а)

Спасибо заранее!

+0

Какую версию SQL Server вы используете? –

ответ

7
select top 1 c.name, b.price 
from books b 
inner join cardsofcreaders cr on cr.book_id = b.book_id 
inner join clients c on c.client_id = cr.client_id 
order by b.price desc 
4

Принимая несколько разный ответ на ваш вопрос, учитывая структуру вашей таблицы, обратите внимание, что несколько клиентов могут брать книгу с самой дорогой ценой. Чтобы найти всех таких клиентов:

SELECT c.Name, b.Price 
FROM 
    (
    SELECT TOP 1 Book_ID, Price 
    FROM BOOKS 
    ORDER BY Price desc 
) b 
    INNER JOIN CardsOfReaders car 
    on b.BOOK_ID = car.BOOK_ID 
    INNER JOIN Clients c 
    ON car.ClientID = c.Client_ID; 
2

Или еще одна вариация, так как в реальной жизни многие книги могут иметь одинаковую, самую высокую цену.

SELECT C.name, B.Price --,B.Title /*In case there are several books*/ 
FROM (SELECT MAX(Price) MPrice 
    FROM BOOKS) mx 
JOIN BOOKS B ON B.Price = mx.MPrice 
JOIN CardsOfReaders crd ON crd.BOOK_ID = B.BOOK_ID 
JOIN Clients C on C.ClientID = crd.ClientID