【发布时间】:2021-10-18 16:52:45
【问题描述】:
我有一个系统,其中有多个角色的用户,有些人最多可以分配 5 个不同的角色,我想构建一个查询,我可以在其中显示用户名,如果他们有特定的角色,然后如果他们有第二个特定角色。如果他们这样做,那么两者都会填充,但如果他们只有第一个角色,那么第二列将显示为空白。
我知道我下面的内容是错误的,因为它只会在用户同时拥有两个角色时才显示,但是否可以输入 IF 语句或类似的语句,从而第二个角色列将显示第二个角色,或者如果没有其他角色分配或分配任何其他角色显示空值?
SELECT USERS.USER_NAME, USER_ROLE.USER_ROLE, USER_ROLE_1.USER_ROLE
FROM SYSTEM.USERS USERS, SYSTEM.USER_ROLE USER_ROLE, SYSTEM.USER_ROLE USER_ROLE_1
WHERE USERS.USER_NAME = USER_ROLE_1.USER_NAME AND USERS.USER_NAME = USER_ROLE.USER_NAME
AND ((USER_ROLE.USER_ROLE = 'MASTER') AND (USER_ROLE_1.USER_ROLE='ADMIN'))
另外我不想要重复,这就是为什么我没有尝试某种显示用户,如果他们有角色 1 或角色 1 和角色 2 等,如下所示
SELECT USERS.USER_NAME, USER_ROLE.USER_ROLE, USER_ROLE_1.USER_ROLE
FROM SYSTEM.USERS USERS, SYSTEM.USER_ROLE USER_ROLE, SYSTEM.USER_ROLE USER_ROLE_1
WHERE USERS.USER_NAME = USER_ROLE_1.USER_NAME AND USERS.USER_NAME = USER_ROLE.USER_NAME AND (((USER_ROLE.USER_ROLE = 'MASTER') AND (USER_ROLE_1.USER_ROLE='ADMIN')) OR (USER_ROLE.USER_ROLE = 'MASTER'))
【问题讨论】:
-
欢迎来到 SO。对于您的第一个问题,您需要使用
left outer join。那里有大量的信息。
标签: sql