SQL简单查询问题
问题描述:
我有一个简单的SQL问题。SQL简单查询问题
我有3个表
Books
--------------------
Book_ID(pk) | Title | Price
--------------------
Clients
---------------------
Client_ID(pk) | Name |
CardsOfReaders
---------------------
Book_ID(pk,fk)| Client_ID(pk, fk)
所以是这样一个问题:如何显示谁借的书具有最高的性价比阅读器的名称(列价格显示为好)
提前致谢!
答
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
答
对于您的问题,考虑到您的表格结构略有不同,请注意,多个客户可能以最昂贵的价格借这本书。要查找所有此类客户:
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;
答
或者另一种变化,因为在现实生活中很多书可能具有相同的,最高价格。
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
您使用的是哪个版本的SQL Server? –