You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snowflake中含WHERE...CONNECT BY的EXISTS子查询不支持问题咨询

Snowflake 报错“Unsupported subquery type cannot be evaluated”的原因解析

运行以下代码时,我遇到错误 "Unsupported subquery type cannot be evaluated":

SELECT '"' || TABLE_CATALOG || '"."' || TABLE_SCHEMA || '"."' || NAME || '"'
FROM SNOWFLAKE.ACCOUNT_USAGE.GRANTS_TO_ROLES TBL_LIST
WHERE DELETED_ON IS NULL
    AND GRANTED_ON = 'TABLE'
    AND PRIVILEGE IN ('SELECT','DELETE')
    AND EXISTS (SELECT 1
                FROM (SELECT DISTINCT NAME AS CHILD, GRANTEE_NAME AS PARENT
                        FROM SNOWFLAKE.ACCOUNT_USAGE.GRANTS_TO_ROLES
                        WHERE GRANTED_ON = 'ROLE'
                            AND DELETED_ON IS NULL)
                WHERE GRANTEE_NAME IN (CHILD, CURRENT_ROLE())
                START WITH PARENT = CURRENT_ROLE()
                CONNECT BY PARENT = PRIOR CHILD)
GROUP BY '"' || TABLE_CATALOG || '"."' || TABLE_SCHEMA || '"."' || NAME || '"'
HAVING COUNT(DISTINCT PRIVILEGE) = 2;

这段代码的目标是获取当前角色同时拥有SELECT和DELETE权限的所有表列表。我在Snowflake中创建了最小复现示例:

SELECT *
FROM SNOWFLAKE.ACCOUNT_USAGE.GRANTS_TO_ROLES TBL_LIST
WHERE EXISTS (SELECT 1
                FROM (SELECT DISTINCT NAME AS CHILD, GRANTEE_NAME AS PARENT
                        FROM SNOWFLAKE.ACCOUNT_USAGE.GRANTS_TO_ROLES)
                WHERE GRANTEE_NAME = CHILD
                START WITH PARENT = CURRENT_ROLE()
                CONNECT BY PARENT = PRIOR CHILD);

我已经确认:移除嵌套的WHERE子句,或者去掉START WITH...CONNECT BY递归查询序列后,查询就能正常执行。我想了解这类子查询不被支持的原因。

更新(6个月后):我遇到了未使用CONNECT BY的类似问题。

内容的提问来源于stack exchange,提问作者DisasterArea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 22:25:17