我的表是:
allowed(resourceid, personid)
person(personid, email)
我想打印出一个人是否有权访问资源,假设有资源ID = 2。 结果应该是:
personright(personid, email, resourceid)
如果不允许该人访问资源2,则和resourceid应为null。如果允许该人访问2,则resourceid应为2。
所以我希望每次执行查询时都会打印出整个用户列表。
我有一个使用子查询的工作解决方案,但我希望通过连接来完成此操作。
select person.personid, person.email, allowed.resourceid
from person
right join allowed on(person.personid = allowed.personid)
where (allowed.resourceid IS NULL OR allowed.resourceid = 2);
为什么这不起作用?
答案 0 :(得分:4)
根据您对问题的描述 - 此处应为左连接,而不是右连接。
select person.personid, person.email, allowed.resourceid
from person
left join allowed on person.personid = allowed.personid and allowed.resourceid = 2
另请注意,我已将allowed.resourceid = 2
条件从where
子句移至连接条件。因此,如果allowed
表中没有匹配的记录resourceid = 2
和personid
等于来自personid
表的person
- 那么您将获得{{1}完全符合要求。