mysql - 右连接不返回空值

标签 mysql sql join right-join

我的表是:

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/

相关文章:

每次操作后的 MySQL SUM 和 MIN

mysql - 将数据库上传到 GitHub

php - 选择框不保留值

mysql - SQL - 多个重复行的总和等于 0

sql - postgresql 明显不工作

mysql - 在联接表中的 MIN 和 MAX 日期之间

MySQL UPDATE WHERE IN分别为每个列出的值?

java - JPA 连接具有空值的列

java - mysql中如何使用多线程取数据

mysql - #1064 - 你的 SQL 语法有错误;检查手册....您的 MariaDB 服务器版本以获取在第 1 行的 ')........ 附近使用的正确语法