我有这样的疑问:
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在两个不同的网络上有两个权限。我想授予net 9124823324095上的权限,所以我不想要第三条记录。
但我不能使用网络id进行过滤,因为我可能有一个用户在其他网络上有权限,但在我的网络上没有权限。
换句话说,我希望在查询中有两条或更多记录-for用户,我只能获取我的net -for用户的记录,我只能获取该记录。
这很难解释。谢谢你的帮助!
发布于 2012-09-27 21:56:24
以下代码适用于大多数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您是否考虑过这样的情况:网络上有多个权限,但您的网络没有权限?这些都被您的条件排除在外。
https://stackoverflow.com/questions/12605948
复制相似问题