考虑以下结构:

alt text http://aeon-dev.org/pap/pap_db.png

忽略表 user_token。

现在,假设您需要获取与用户相关的所有角色,可能通过其相关组或与他直接相关。如果出现同一个角色直接与群组和用户相关,则与用户相关的角色优先于群组赋予的角色。

这是否有可能在单个查询中完成?

干杯!

最佳答案

此查询将获取单个用户直接或由组赋予的每个角色

SELECT * FROM ROLE WHERE ID IN (
    SELECT ROLE_ID
    FROM USER_HAS_ROLE
    WHERE USER_ID = 1
    UNION
    SELECT ROLE_ID
    FROM USER_HAS_GROUP UG
    INNER JOIN GROUP_HAS_ROLE GR ON UG.GROUP_ID = GR.GROUP_ID
    WHERE USER_ID = 1
)

关于sql - MySQL - 单个语句中的复杂数据查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2998227/

10-12 19:03