1

我有这个查询:

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

结果是这样的:

id  name    network_id  perm
1   Luca Niccolini  9124823324095   1
2   Irene Pippo 9124823324095   0
2   Irene Pippo 1234567812345678124 1

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

id  name    network_id  perm
1   Luca Niccolini  9124823324095   1
2   Irene Pippo 9124823324095   0

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

但是我无法使用网络 ID 进行过滤,因为我可以拥有一个对其他网络具有权限的用户,但在我的网络上却没有。

换句话说,我希望-对于在查询中有两条或更多记录的用户,我只能获取我的网络的记录-对于只有一条记录的用户,我可以获取该记录。

很难解释。感谢您的帮助!

4

1 回答 1

0

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

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

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

于 2012-09-27T13:56:24.007 回答