题目描述:
几个朋友来到电影院的售票处,准备预约连续空余座位。你能利用表 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;
from g0523 a join g0523 b
:使用连表查询,得出笛卡尔积数据。on abs(a.seat_id - b.seat_id) = 1
确保表a
中的座位与表b
中的座位相邻(±都为1)a.free = 1 and b.free = 1
且确保两个座位都是空闲的order by a.seat_id
:按照seat_id
对结果进行排序。