基于MySQL多表关联查询实现用户预约状态展示需求
解决方案
我们可以通过LEFT JOIN关联三张表,结合CASE表达式判断当前用户是否已预约对应场次,从而输出对应的操作文本:
SELECT lc.name AS class_name, ls.session_timestamp, CASE WHEN lb.email IS NOT NULL THEN 'CANCEL' ELSE 'BOOK NOW' END AS action FROM library_classes lc INNER JOIN library_sessions ls ON lc.id = ls.class_id LEFT JOIN library_bookings lb ON ls.id = lb.session_id AND lb.email = 'jose@gmail.com' ORDER BY ls.session_timestamp;
语句说明:
- 用
INNER JOIN关联课程表和场次表,确保只获取有对应课程的有效场次; - 用
LEFT JOIN关联预约表,并在关联条件中指定目标用户邮箱,这样能保留所有场次数据,同时标记出该用户已预约的记录; - 通过
CASE表达式判断是否存在该用户的预约记录,输出对应的操作文本; - 按场次时间排序,保证结果顺序符合展示逻辑。
执行语句后将得到需求中的输出结果:
Tolkien | 2023-08-01 15:30:00 | CANCEL CS Lewis | 2023-08-02 10:15:00 | BOOK NOW Tolkien | 2023-08-04 09:30:00 | BOOK NOW
内容的提问来源于stack exchange,提问作者michaelmcgurk
相关产品推荐
相关产品推荐

