我正试图建立先进的账户许可制度。
"account_permission"表(直接)拥有一个权限,"account_group"和"permission_group"表(应该称为"permission_group"表)。问题
我需要编写Select命令,该命令将返回与帐户相关的所有权限(包括组权限),其中帐户是
我有个好例子,但我很确定这不是一个最佳的表演练习.并且在我的示例中复制了"account_id“
SELECT
t1.*
FROM
permission AS t1
LEFT JOIN
account_permission AS t2
ON t1.id = t2.permission_id
LEFT JOIN
permission_group AS t3
ON t1.id = t3.permission_id
WHERE
t2.account_id = 'a518f2fb-7e46-4c0c-9428-c87eac6674e8'
OR t3.group_id IN
(
SELECT
group_id
FROM
account_group
WHERE
account_id = 'a518f2fb-7e46-4c0c-9428-c87eac6674e8'
);数据库图

发布于 2021-02-11 11:35:38
看起来,您的代码也可以生成副本。我建议把这写成:
SELECT p.*
FROM permission p
WHERE EXISTS (SELECT 1
FROM account_permission ap
WHERE ap.permission_id = p.id AND
ap.account_id = 'a518f2fb-7e46-4c0c-9428-c87eac6674e8'
) OR
EXISTS (SELECT 1
FROM permission_group pg JOIN
account_group ag
ON pg.group_id = ag.group_id
WHERE pg.permission_id = p.id AND
ag.account_id = 'a518f2fb-7e46-4c0c-9428-c87eac6674e8'
);这个版本不能返回重复的(嗯,至少由于join的原因是重复的;我想permissions可能有重复的)。
然后,为了提高性能,您需要以下索引:
account_perimission(permission_id, account_id)permission_group(permission_id, group_id)account_group(group_id, account_id)https://stackoverflow.com/questions/66152767
复制相似问题