【问题标题】:Right join does not return null values右连接不返回空值
【发布时间】:2015-10-05 22:18:20
【问题描述】:

我的桌子是:

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

为什么这不起作用?

【问题讨论】:

    标签: mysql sql join right-join


    【解决方案1】:

    根据您对问题的描述 - 这里应该是左连接,而不是右连接。

    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 等于来自person 表的适当personid - 您将得到空值作为allowed.resourceid,完全符合要求。

    【讨论】:

    • @Babs 这不是错字,而是有意的。查看更新的答案。
    • @AndyKorneyev 哦,现在我明白了!非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    相关资源
    最近更新 更多