2014-01-27 103 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