SQL语句练习一

2024-06-25 17:32:06 浏览数 (1)

题目描述:

几个朋友来到电影院的售票处,准备预约连续空余座位。你能利用表 F0831,帮他们写一个查询语句,获取所有空余座位,并将它们按照 seat_id 排序后返回吗?

对于如上样例,你的查询语句应该返回如下结果。

注意:seat_id 字段是一个自增的整数,free 字段是布尔类型('1' 表示空余, '0' 表示已被占据)。连续空余座位的定义是大于等于 2 个连续空余的座位。

测试数据:

代码语言:sql复制
CREATE TABLE G0523
(
seat_id INT,
free INT
)

INSERT INTO G0523 VALUES 
(1,1),
(2,0),
(3,1),
(4,1),
(5,1)

解答方法

代码语言:sql复制
select distinct a.seat_id
from g0523 a join g0523 b
  on abs(a.seat_id - b.seat_id) = 1
  and a.free = 1 and b.free = 1
order by a.seat_id;
  1. from g0523 a join g0523 b:使用连表查询,得出笛卡尔积数据。
  2. on abs(a.seat_id - b.seat_id) = 1 确保表 a 中的座位与表 b 中的座位相邻(±都为1)
  3. a.free = 1 and b.free = 1且确保两个座位都是空闲的
  4. order by a.seat_id:按照 seat_id 对结果进行排序。
sql

0 人点赞