LeetCode刷题-数据库(MySQL)- 603.连续空余座位

603.连续空余座位

一、题目描述

几个朋友来到电影院的售票处,准备预约连续空余座位。

你能利用表 cinema ,帮他们写一个查询语句,获取所有空余座位,并将它们按照 seat_id 排序后返回吗?

seat_id free
1 1
2 0
3 1
4 1
5 1

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

seat_id
3
4
5

注意:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/consecutive-available-seats
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、思路分析

因为连续空余座位的定义是大于等于2个连续空余的座位,那么只要找出所有连续2个空余的座位号输出即可。
错号左连接,即保持左表不动,按照左表与右边的seat_id差值为1进行左连接,举例来说:
左表seat_id为1的与右表seat_id为2的连接,或者左表seat_id为2的与右表seat_id为1的连接。
此时,只要左表中的free与右边中的free都为1,则表示这两个连续作为均为空座。

三、代码实现

SELECT 
	DISTINCT c1.seat_id
FROM 
	cinema c1
LEFT JOIN 
	cinema c2
ON 
	abs(c1.seat_id - c2.seat_id) = 1
WHERE 
	c1.free = 1 AND c2.free = 1
ORDER BY c1.seat_id;

你可能感兴趣的:(MySQL)