如何通过多表关联查询过滤,生成排除指定用户已预订活动的视图
实现SQL语句
默认两张表命名规则:活动表为events(存储活动基础信息,含EventID/EventName/City字段),预订表为bookings(存储用户预订记录,含UserID/EventID关联字段),可直接用以下语句创建符合要求的视图:
写法1(推荐,NOT EXISTS性能更稳定,无NULL值异常问题)
CREATE VIEW user_available_events AS SELECT e.EventID, e.EventName, e.City FROM events e WHERE NOT EXISTS ( SELECT 1 FROM bookings b WHERE b.EventID = e.EventID AND b.UserID = 4 );
写法2(NOT IN写法,逻辑更直观)
CREATE VIEW user_available_events AS SELECT EventID, EventName, City FROM events WHERE EventID NOT IN ( SELECT DISTINCT EventID FROM bookings WHERE UserID = 4 );
逻辑说明
- 先通过子查询筛选出用户ID为4的用户已经预订的所有活动ID
- 从活动主表中排除上述活动ID对应的记录,查询剩余活动的三个要求字段
- 最终将查询结果封装为视图即可,视图名可根据实际业务需求修改
内容的提问来源于stack exchange,提问作者esty12
相关产品推荐
相关产品推荐

