如何使用SQL在没有找到所需值时显示null

  • 本文关键字:null 显示 SQL 何使用 sql
  • 更新时间 :
  • 英文 :


我有一个系统,其中有多个角色的用户,有些人可以有多达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'))

您应该了解更多关于连接的知识。您的语法可能适合您,但是您编写的格式使其难以分析。试试这样做:

SELECT USERS.USER_NAME
,USER_ROLE.USER_ROLE
,USER_ROLE_1.USER_ROLE
FROM SYSTEM.USERS USERS
INNER JOIN SYSTEM.USER_ROLE USER_ROLE
ON USERS.USER_NAME = USER_ROLE.USER_NAME
LEFT OUTER JOIN SYSTEM.USER_ROLE USER_ROLE_1
ON USERS.USER_NAME = USER_ROLE_1.USER_NAME
WHERE (((USER_ROLE.USER_ROLE = 'MASTER') 
AND (USER_ROLE_1.USER_ROLE='ADMIN')
) 
OR (USER_ROLE.USER_ROLE = 'MASTER')
)

我不知道这里的数据是什么样子的,但是我列出的如何用'ON'子句编写连接的方式应该会对您有所帮助。正如@Andrew所指出的,LEFT OUTER JOIN似乎适合于可能在每个记录中都没有匹配值的表。您仍然会从其他表中输出记录,不匹配的字段显示为'NULL'。

尝试如下:

SELECT 
USERS.USER_NAME,
RoleQ.FirstRole,
(CASE WHEN RoleQ.FirstRole IS NULL THEN RoleQ.SecondRole ELSE NULL END) AS SecondRole   
FROM   SYSTEM.USERS         USERS
LEFT JOIN 
(
SELECT 
USER_NAME,
MAX(CASE WHEN USER_ROLE = 'MASTER' THEN USER_ROLE ELSE NULL END) AS FirstRole,
MAX(CASE WHEN USER_ROLE = 'ADMIN' THEN USER_ROLE ELSE NULL END) AS SecondRole
FROM SYSTEM.USER_ROLE
GROUP BY USER_NAME 
) AS RoleQ ON USERS.USER_NAME = RoleQ.USER_NAME

相关内容

  • 没有找到相关文章