右连接不返回空值

时间:2015-07-16 12:52:48

标签: mysql sql join right-join

我的表是:

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);

为什么这不起作用?

1 个答案:

答案 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 = 2personid等于来自personid表的person - 那么您将获得{{1}完全符合要求。