mysql - 高级 SQL 选择查询/动态列
问题描述
我正在学习 MySQL,但在处理更高级的查询时遇到了困难,所以我希望有人能有所启发
我有以下数据库(我希望它的格式正确)
table_visitors
visitor_id | visitor_name
1 | Joe
2 | Bob
table_rooms
room_id | room_name
1 | room 1
2 | room 2
3 | room 3
4 | room 4
table_roomsvisitors (indicates which visitors can access which rooms)
visitor_id | room_id
1 | 1
1 | 2
1 | 3
2 | 1
2 | 4
如果允许选定的访客访问每个房间,我还想列出(针对特定访客)table_rooms 中的每个项目
预期的结果应该是这样的:
query for Joe:
room_name | access
room 1 | true
room 2 | true
room 3 | true
room 4 | false
query for Bob:
room_name | access
room 1 | true
room 2 | false
room 3 | false
room 4 | true
解决方案
您可以使用 left join 和 case 语句来检查用户是否可以访问房间
select r.room_name,
case when rv.visitor_id is not null then true else false end access
from table_rooms r
left join table_roomsvisitors rv on r.room_id = rv.room_id
and rv.visitor_id = 1
table_roomsvisitors
left join 将根据附加连接条件在没有为 room in 找到关联的情况下生成 null,因为rv.visitor_id = 1
它将仅连接table_roomsvisitors
visitor_id 为 1 的行,而对于其他行,它将返回 null,因此在选择部分中,您可以检查非空行并返回真,空行为假
推荐阅读
- c# - 如何重构这个 linq 查询?
- jquery - Tumblr 主题点赞按钮不起作用
- android - xamarin 表单自定义渲染器中不存在控件属性
- http - 在实现 PoolingHttpClientConnectionManager 时遇到问题
- kivy - 如何将时钟小部件添加到屏幕?
- java - Java Swing中的面板向左浮动并带有垂直条
- azure - 如何在 API 策略中的应用程序洞察请求中包含自定义字段
- jenkins-plugins - jenkins 发布插件兼容多管道作业
- python - 如何在 for 循环中对数据帧执行逻辑操作?
- c# - 强制转换绑定路径,以便它在设计时识别 ViewModel 属性