我需要一些帮助,请:)
我有
ACCOUNTS
- account_id
- username
- password
USER_RIGHTS
- rights_id
- description
- level
有很多关系(所以我需要第三张桌子)
USER_RIGHTS
包含以下值:
1,'READ_ACCOUNTS',0
2,'CREATE_ACCOUNTS',1
3,'UPDATE_ACCOUNTS',2
4,'DELETE_ACCOUNTS',3
5,'READ_ORDERS',0
6,'CREATE_ORDERS',1
7,'UPDATE_ORDERS',2
8,'DELETE_ORDERS',3
我需要: - 一个返回所有无权删除任何内容的帐户的查询 - 返回具有最大用户权限数
的所有帐户的查询谢谢!
答案 0 :(得分:0)
CREATE TABLE accounts_2_user_rights
(
id int
account_id int
rights_id int
)
-- all without delete right
select *
from accounts acc
where not exists
(
select 1
from rights_user ru
inner join accounts_2_user_rights a2ur
on a2ur.rights_id = ru.rights_id
and a2ur.account_id = acc.account_id
where ru.description like 'DELETE%'
)
-- all maximum
select account_id, count(1)
from accounts acc
where exists(
select 1
from accounts_2_user_rights a2ur
inner join user_rights ur
on ur.rights_id = a2ur.rights_id
where a2ur.account_id = acc.account_id
and count(1) = 9
)
答案 1 :(得分:0)
我建议你在SQLfiddle上创建一个例子。到现在为止,我只是告诉你该怎么做。如果你提供代码,我会提供代码。
基本上你没有对user_rights加入权做一个子查询来获取帐户ID并通过帐户提供查询。 这是伪代码:
select * from accounts where account_id in (
select account_id from user_rights_per_account
join user_rights on user_right_id = user_right_id
where (your filter)
)
您可以不使用子查询,但这样您就不需要使用distinct。 如果需要进行聚合,可以执行另一个子查询。