sql - 在 Snowflake IN 子查询中使用 UPPER 时获取“无法评估不支持的子查询类型”
问题描述
我有一个雪花表如下:
create table field_names_to_retrieve("QualifiedApiName" varchar(80));
INSERT INTO field_names_to_retrieve VALUES ('reason');
INSERT INTO field_names_to_retrieve VALUES ('reason__c');
INSERT INTO field_names_to_retrieve VALUES ('name__c');
INSERT INTO field_names_to_retrieve VALUES ('email__c');
如果我运行以下查询,它可以工作:
SELECT
"QualifiedApiName",
CASE WHEN UPPER(REGEXP_REPLACE("QualifiedApiName", '__c$', '')) NOT IN
(SELECT "QualifiedApiName" FROM "field_names_to_retrieve")
THEN REGEXP_REPLACE("QualifiedApiName", '__c$', '')
ELSE "QualifiedApiName"
END
FROM
"field_names_to_retrieve";
但是,以下查询不起作用。请注意,子查询中的 UPPER 中有:
SELECT
"QualifiedApiName",
CASE WHEN UPPER(REGEXP_REPLACE("QualifiedApiName", '__c$', '')) NOT IN
(SELECT UPPER("QualifiedApiName") FROM "field_names_to_retrieve")
THEN REGEXP_REPLACE("QualifiedApiName", '__c$', '')
ELSE "QualifiedApiName"
END
FROM
"field_names_to_retrieve";
关于为什么带有 UPPER 的子查询失败的任何想法?
解决方案
显然,表达式是一个问题NOT IN
。NOT IN
无论如何,我不鼓励使用with 子查询,因为NULL
值不是直观地处理的。
它适用于NOT EXISTS
吗?
SELECT (CASE WHEN NOT EXISTS (SELECT 1
FROM "field_names_to_retrieve" fntr2
WHERE UPPER(REGEXP_REPLACE(fntr."QualifiedApiName", '__c$', '')) = UPPER(fntr2."QualifiedApiName")
)
THEN REGEXP_REPLACE("QualifiedApiName", '__c$', '')
ELSE "QualifiedApiName"
END)
FROM "field_names_to_retrieve" fntr;
推荐阅读
- ngxs - 如何减少 NGXS 中的 CRUD 样板?
- javascript - Vue.js - 从数组中获取 N 元素 - 未定义
- javascript - 两个部分相互重叠
- plot - altair,如何使用 Linked Brushing 创建多面板线图?
- python - os.environ ['PATH'] 上 LocalDevServer 上的 Python2.7 GAE 条带错误
- c++ - E0020 标识符“pop”未定义
- swift - Firebase查询上的错误快照Ordered byChild
- php - 如何修复“未定义的索引:$_POST 中的链接”
- r - 如何用零(在R中)替换数字向量中的非二进制(0/1除外)字符?
- visual-studio-code - 在 Visual Studio 代码中,如何隐藏文件选项卡下的文件路径?