我倾向于使用MySQL,但仍在尝试更高级的查询,因此我希望有人可以对此有所了解
我有以下数据库(希望它的格式正确)
0x1B
如果允许所选访问者访问每个房间,我还要列出(针对特定访问者)table_rooms中的每个项目
预期结果应该是这样的:
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
答案 0 :(得分:0)
您可以使用左连接和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
在rv.visitor_id = 1
中没有空间的地方产生null,它将仅联接table_roomsvisitors
中visitor_id为1的行。其他行将返回null,因此在选择部分中,您可以检查不为空的行,并为空行返回true,false
答案 1 :(得分:0)
您使用CROSS JOIN
了:
select v.visitor_name, r.room_name,
(case when rv.visitor_id is null then 'false' else 'true' end) as access
from table_visitors v cross join
table_rooms r left join
table_roomsvisitors rv
on rv.visitor_id = v.visitor_id and rv.room_id = r.room_id
where v.visitor_name = 'Joe';
答案 2 :(得分:0)
加入表,然后使用true和false的大小写。那么,该ID取决于谁,因为您说了bob查询和joe查询
对于乔:
select tr.room_name, case when rv.visitor_id is not null then 'true' else 'false' end access from table_rooms tr
left join table_roomvisitors rv on tr.room_id = rv.room_id
where rv.visitor_id = 1
对于鲍勃:
select tr.room_name, case when rv.visitor_id is not null then 'true' else 'false' end access from table_rooms tr
left join table_roomvisitors rv on tr.room_id = rv.room_id
where rv.visitor_id = 2