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