Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 是否检索SQL中具有最小值的所有记录?_Mysql_Sql - Fatal编程技术网

Mysql 是否检索SQL中具有最小值的所有记录?

Mysql 是否检索SQL中具有最小值的所有记录?,mysql,sql,Mysql,Sql,我正在使用MYSQL中的酒店预订数据库练习SQL查询。 数据库中有4个表,分别是来宾、客房、酒店和预订。 我想编写一个SQL查询来检索价格最低的酒店房间的详细信息。有多条具有最低价格的记录,任务是检索所有记录,而不是仅检索一条记录 SELECT * FROM room ORDER BY Price LIMIT 1; 这只会给我一条记录,我知道有不止一条记录,但我不知道到底有多少条记录是最低价格的,所以我想我不能使用ORDER BY和LIMIT来执行此任务 下面是我要查询的表的一部分。 桌子名称

我正在使用MYSQL中的酒店预订数据库练习SQL查询。 数据库中有4个表,分别是来宾、客房、酒店和预订。 我想编写一个SQL查询来检索价格最低的酒店房间的详细信息。有多条具有最低价格的记录,任务是检索所有记录,而不是仅检索一条记录

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
)