Mysql 是否检索SQL中具有最小值的所有记录?
我正在使用MYSQL中的酒店预订数据库练习SQL查询。 数据库中有4个表,分别是来宾、客房、酒店和预订。 我想编写一个SQL查询来检索价格最低的酒店房间的详细信息。有多条具有最低价格的记录,任务是检索所有记录,而不是仅检索一条记录Mysql 是否检索SQL中具有最小值的所有记录?,mysql,sql,Mysql,Sql,我正在使用MYSQL中的酒店预订数据库练习SQL查询。 数据库中有4个表,分别是来宾、客房、酒店和预订。 我想编写一个SQL查询来检索价格最低的酒店房间的详细信息。有多条具有最低价格的记录,任务是检索所有记录,而不是仅检索一条记录 SELECT * FROM room ORDER BY Price LIMIT 1; 这只会给我一条记录,我知道有不止一条记录,但我不知道到底有多少条记录是最低价格的,所以我想我不能使用ORDER BY和LIMIT来执行此任务 下面是我要查询的表的一部分。 桌子名称
SELECT * FROM room ORDER BY Price LIMIT 1;
这只会给我一条记录,我知道有不止一条记录,但我不知道到底有多少条记录是最低价格的,所以我想我不能使用ORDER BY和LIMIT来执行此任务
下面是我要查询的表的一部分。
桌子名称:房间
在此房间表中,Hotel_No引用Hotel表中的Hotel_No,此表的主键同时是Hotel_No和room_No
如何在MYSQL中做到这一点?如果希望所有记录在整个表中都具有最低价格,一种跨数据库解决方案是使用相关子查询进行过滤:
select r.*
from room r
where r.price = (select min(r1.price) from room r1)
根据您的数据库,可能会有更好的解决方案。通常,SQL Server具有排名前1的关系:
或者,如果您的数据库支持窗口功能,则可以使用rank:
这假设您的表有一个Id列,如果没有,您可以在最后一行中使用其中t1.Price为NULL
它返回所有不存在较低价格的记录
SELECT TOP 1 hotel.hotelnos, hotel.roomnos, hotel.roomtype, hotel.price
FROM hotel
ORDER BY hotel.price;
这可能因SQL的类型而异,例如Mysql、MSSQL等如果您想要每个酒店的最低价格的房间,则使用不存在,如下所示:
select r.* from room r
where not exists (
select 1 from room
where hotel_no = r.hotel_no and price < r.price
)
如果您只想要最低价格的房间:
select r.* from room r
where not exists (
select 1 from room
where price < r.price
)
或者你可以试试
挑选*
从房间
其中price=selectminprice FROM room我之前给出的答案在MSSQL中有效,下面的答案在MYSQL中有效
SELECT*FROM room WHERE price=SELECT MINprice FROM room我编写的查询有效,将检索到与最低价格相同的记录。是的,我编写了TOP 1,它将检索与最低价格相同的记录。您能帮我理解吗?你看到我在之前评论中发送的链接上的小演示了吗?我使用下面的sql语句从hotel ORDER BY hotel.price中选择TOP 1 hotel.hotelnos、hotel.roomnos、hotel.roomtype、hotel.price;它以最低价格检索所有行。在vba、ms access中尝试相同的SQL语句,它将返回多行。修改表定义,使其具有一个自动生成的pkey。B不要用截图来显示文本数据。用文本来显示文本。因此,以代码块格式将表作为列中的文本。请参阅编辑帮助。在代码问题中给出一个答案。所以这个表应该是初始化代码,它是以代码块格式列中的文本。
SELECT TOP 1 hotel.hotelnos, hotel.roomnos, hotel.roomtype, hotel.price
FROM hotel
ORDER BY hotel.price;
select r.* from room r
where not exists (
select 1 from room
where hotel_no = r.hotel_no and price < r.price
)
select r.* from room r
where not exists (
select 1 from room
where price < r.price
)