人大金仓数据库SQL之KES获取用户组成员信息
关键字:
SQL、用户组成员信息、人大金仓、KingbaseES
前言
KES中用户组成员的oid以数组的形式存储在视图sys_usergroup中、成员的详细信息存储于系统表sys_ authid中。
现需求如下:执行一次查询,获取指定用户组的成员的详细信息。
分析:可以通过sys_usergroup视图获取指定用户组的成员oid,再根据获取到的成员oid到系统表sys_ authid中获取成员的详细信息。
难点:用户组成员的oid以数组的形式存储在视图sys_usergroup中,联立查询时如何处理成员oid数组?
解决:通过函数UNNEST和函数ANY解决
UNNEST()
UNSEST函数用于在SQL中将数组解包为一行行的元素。通常情况下,一个数组是作为单个值存储在数据库中的。但是,当需要对数组中的单个元素进行查询时,就需要使用UNNEST函数将其解包后再进行查询操作;
UNNEST函数简单使用示例如下:
SELECT UNNEST('{1,2,3,4,5,6,7}'::INT[]);
执行上述SQL可得到结果如下:
KES中用户组成员的oid以数组的形式存储在视图sys_usergroup中,执行SQL:SELECT * FROM sys_usergroup结果如字段group_members:
使用UNNEST函数查询用户组oid为18482的字段group_memebers,执行SQL:SELECT UNNEST(group_members) FROM sys_usergroup WHERE group_oid =18482结果如下:
可以看到成员OID数组被展开为行数据了。
ANY()
ANY函数是在SQL语言中用于判断值与集合的关系的函数。它通常用于子查询中,用来判断一个值是否在一个集合中。
其用法如下:value operator ANY(subquery)
value是要进行判断的值,operator是比较操作符(=、<、>等),subquery是一个子查询,用来返回一个值的集合
获取用户组成员详细信息
综上所述可以得到SQL:
SELECT * FROM sys_authid a WHERE a.oid = any (SELECT UNNEST(group_members) FROM sys_usergroup WHERE group_oid =18482)
执行结果如下: