我的表是:
allowed(resourceid, personid)
person(personid, email)
我想打印出一个人是否有权访问资源,比如说 resourceid = 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);
为什么这不起作用?
最佳答案
根据您对问题的描述 - 这里应该是左连接,而不是右连接。
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
表 - 您将完全按照要求获得 null 作为 allowed.resourceid
。
关于mysql - 右连接不返回空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31454724/