本文共 735 字,大约阅读时间需要 2 分钟。
对于从cinema
表中查询连续空余座位的问题,可以采用以下两种方法:
SELECT DISTINCT seat_id FROM ( SELECT a.seat_id AS seat_id FROM cinema a JOIN cinema b ON a.seat_id = b.seat_id - 1 WHERE a.free = 1 AND b.free = 1 UNION ALL SELECT b.seat_id AS seat_id FROM cinema a JOIN cinema b ON a.seat_id = b.seat_id - 1 WHERE a.free = 1 AND b.free = 1) cORDER BY seat_id ASC;
SELECT seat_id FROM ( SELECT seat_id, free, LEAD(free, 1, 0) OVER (ORDER BY seat_id) AS f1, LAG(free, 1, 0) OVER () AS f2 FROM cinema) aWHERE free = 1 AND (f1 = 1 OR f2 = 1)ORDER BY seat_id ASC;
两种方法均能有效识别连续空余座位。方法一通过 ##[UNION ALL]## 联合两个子查询,分别匹配当前空位与前一个空位,以及当前空位与后一个空位。方法二则利用 SQL 窗口函数 ##[LEAD()## 和 ##[LAG()##] 来识别连续空位区域,能够更直观地展示空位分布情况。
转载地址:http://hrnhz.baihongyu.com/