首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询的左或右外部联接

查询的左或右外部联接
EN

Stack Overflow用户
提问于 2012-09-27 00:08:44
回答 1查看 53关注 0票数 1

我有这样的疑问:

代码语言:javascript
复制
SELECT  DISTINCT 
        u.id, 
        u.name, 
        n.network_id, 
        n.perm 
FROM    users as u RIGHT OUTER JOIN 
        nets_permissions as n ON u.id = n.user_id AND n.perm<> 3 
WHERE   u.id!=3

结果是这样的:

代码语言:javascript
复制
id  name    network_id  perm
1   Luca Niccolini  9124823324095   1
2   Irene Pippo 9124823324095   0
2   Irene Pippo 1234567812345678124 1

现在我希望查询的结果是:

代码语言:javascript
复制
id  name    network_id  perm
1   Luca Niccolini  9124823324095   1
2   Irene Pippo 9124823324095   0

事实上,我想将网络上的权限授予一些用户。该用户可以已经拥有网络上的权限,也可以拥有其他网络上的权限。因此,在这种情况下,用户Luca在网络9124823324095上只有权限,但用户Irene在两个不同的网络上有两个权限。我想授予net 9124823324095上的权限,所以我不想要第三条记录。

但我不能使用网络id进行过滤,因为我可能有一个用户在其他网络上有权限,但在我的网络上没有权限。

换句话说,我希望在查询中有两条或更多记录-for用户,我只能获取我的net -for用户的记录,我只能获取该记录。

这很难解释。谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-27 21:56:24

以下代码适用于大多数SQL方言:

代码语言:javascript
复制
select id, name, network_id, perm
from (select t.*, count(*) over (partition by u.id) as NumRowsForUser
      from (SELECT  DISTINCT u.id, u.name, n.network_id, n.perm 
            FROM    users as u RIGHT OUTER JOIN 
                    nets_permissions as n ON u.id = n.user_id AND n.perm<> 3 
            WHERE   u.id!=3
           ) t
     ) t
where NumRowsForUser > 1 and network_id = '9124823324095' or
      NumRowsForUser = 1

您是否考虑过这样的情况:网络上有多个权限,但您的网络没有权限?这些都被您的条件排除在外。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12605948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档