XMLAGG 在结果中重复

XMLAGG duplicates in results

我正在尝试将 XMLAGG 实施到我用来在 Teradata 中查找用户访问权限的查询中。这是查询:

SELECT
    A.RoleName
    , B.DatabaseName
    --,  B.AccessRight
    , Trim(Trailing ',' FROM (XmlAgg(Trim(B.AccessRight) || ',' ORDER BY B.AccessRight) (VARCHAR(10000)))) AS AccessRight
FROM DBC.RoleMembers A JOIN DBC.AllRoleRights B
    ON A.RoleName = B.RoleName
    WHERE Grantee='?your_id'
GROUP BY 1,2
ORDER BY 2,1,3
;

以前我只是 select 注释行 B.AccessRight 并梳理结果,但我想将每个角色的访问权限合并到一行中。

上面的查询确实有效,但偶尔会有重复的行。这是输出的一个简单示例:

+----------+--------------+-------------+
| RoleName | DatabaseName | AccessRight |
+----------+--------------+-------------+
| Role1    | dbA          | CM, CT, CV  |
+----------+--------------+-------------+
| Role2    | dbB          | R, R, R, R  |  <-- Problematic column
+----------+--------------+-------------+
| Role3    | dbC          | E, R        |
+----------+--------------+-------------+

我已尝试通过在我的 XMLAGG 查询中添加 DISTINCT 来解决此问题,正如我在 several other solutions 此处看到的那样,但我似乎无法自行解决。

DBC.AllRoleRightsV 包括数据库、table 或列级别的权限。因此,您可能会在数据库级别获得重复项。

join ( select distinct databasename, accessright from DBC.AllRoleRightsV ) as B

可能会有帮助。

或添加 where tableName = 'All' 以仅获得数据库级别的授权。